我正在学习二郎,我对mnesia db非常着迷。我想使用erlang作为后端在C#/ F#中构建一些真实世界的应用程序。
我正在寻找与外界的erlang节点进行通信的良好解决方案。
到目前为止我发现了:
(A)OTP.net ,一个实现“本机”erlang通信协议的开源.net库
这里的问题:
(B)在erlang中使用端口/套接字并实现自定义协议。
这里的问题:
您对本主题有什么建议和经验吗?
我应该在OTP.net库上工作以满足我的需求还是尝试从头开始实施新协议?
JSON或REST解决方案怎么样?是否有任何erlang库可以解决这个问题?
答案 0 :(得分:16)
端口/套接字解决方案是一个好主意,并不像看起来那么难。 Google's protocol buffers正是您所需要的。它非常易于使用,高效且易于维护。它有C#,erlang,java,python等实现(参见OtherLanguages和developer guide)
您可以使用协议缓冲区来定义请求和响应协议结构。然后使用它在erlang和任何其他支持的语言之间进行通信。 tutorial将解释一切。之后,您需要做的就是通过端口发送响应。
这种方法的优点是:
答案 1 :(得分:4)
如果要在Erlang中实现REST API,只需要做一件事。使用优秀的MochiWeb Kit构建您自己的HTTP服务器,实现您的协议。
不要惊慌,它确实比看上去容易。
有很多关于如何做的教程,包括实用程序员的screencast set。
它附带了一套完整的json库,所以你会没事的!
答案 2 :(得分:2)
当然,你可以用Erlang做REST,参见例如http://www.infoq.com/articles/vinoski-erlang-rest - 如果适合您应用的需求,REST是一种很好的方法。 (Pycon Italia Tre,下周在佛罗伦萨,有关于Erlang / Python合作的会议,如果你在托斯卡纳附近,请参见www.pycon.it; - )。
答案 3 :(得分:2)
还有一个JSON library用于Erlang,您可能需要查看。我没有用它,所以我不能从经验中说出来。
答案 4 :(得分:2)
虽然我同意某些REST解决方案很有用,但无论您使用Yaws还是Mochikit,您都会发现自己尝试定义一些中间“语言”,以便生成Mnesia能够处理的查询。
因此我提供这个建议;无论你为自己想到什么项目,只需在erlang中实现它并使用可用的工具。你会在很多方面获得奖励。
然后你可以随时尝试CouchDB。
答案 5 :(得分:0)
我们使用YAWS和客户端的简单http请求/响应实现。在提取参数后,YAWS实现只是将调用委托给适当的gen_server进程。
这种方法的唯一不足之处在于它不是那么快(Google协议缓冲区会更好) - 并且通过在HTTP术语中保持连接“活动”有助于降低所有设置成本并减少过时套接字的数量连接。如果您要返回大量数据,则必须更有创意才能将结果反馈回来。对于大多数不是问题的数据请求 - 响应很容易适应内存。
如果协议的原始性能不是一个问题,那么有些好处:
答案 6 :(得分:0)
我们已经重写了OTP.NET
这个库已经成熟了很多倍,因为它已经从头开始重写.NET / CLR, (与刚刚从Java转换的前一代不同)
看一下这篇文章:
http://blog.aumcode.com/2013/10/nfx-native-interoperability-of-net-with.html