Erlang vs The Real / Outside世界,如何沟通?

时间:2009-04-30 14:57:50

标签: .net json rest erlang protocols

我正在学习二郎,我对mnesia db非常着迷。我想使用erlang作为后端在C#/ F#中构建一些真实世界的应用程序。

我正在寻找与外界的erlang节点进行通信的良好解决方案。

到目前为止我发现了:

(A)OTP.net ,一个实现“本机”erlang通信协议的开源.net库

这里的问题:

  • 图书馆不是很成熟
  • 我不喜欢从Java移植的对象模型(太多几乎完全相同的BCL类复制品)
  • 我不喜欢用于连接的线程模型。
  • 需要许多开放的TCP端口
  • 缺乏安全性

(B)在erlang中使用端口/套接字并实现自定义协议。

这里的问题:

  • 我没有任何经验
  • 未来版本难以维护/扩展

您对本主题有什么建议和经验吗?

我应该在OTP.net库上工作以满足我的需求还是尝试从头开始实施新协议?

JSON或REST解决方案怎么样?是否有任何erlang库可以解决这个问题?

7 个答案:

答案 0 :(得分:16)

端口/套接字解决方案是一个好主意,并不像看起来那么难。 Google's protocol buffers正是您所需要的。它非常易于使用,高效且易于维护。它有C#,erlang,java,python等实现(参见OtherLanguagesdeveloper guide

您可以使用协议缓冲区来定义请求和响应协议结构。然后使用它在erlang和任何其他支持的语言之间进行通信。 tutorial将解释一切。之后,您需要做的就是通过端口发送响应。

这种方法的优点是:

  1. 您可以轻松扩展和更改 未来的协议
  2. 比它更有效率 REST方法
  3. Google目前使用它 几乎所有的内部RPC 协议和文件格式

答案 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术语中保持连接“活动”有助于降低所有设置成本并减少过时套接字的数量连接。如果您要返回大量数据,则必须更有创意才能将结果反馈回来。对于大多数不是问题的数据请求 - 响应很容易适应内存。

如果协议的原始性能不是一个问题,那么有些好处:

  • 您可以挂钩到安全模型(HTTPS或身份验证)
  • 您可以从可以发出Web请求的任何内容中调用API(我们有很多旧的perl代码和Excel工作表 - 将它们排序很简单)

答案 6 :(得分:0)

我们已经重写了OTP.NET

这个库已经成熟了很多倍,因为它已经从头开始重写.NET / CLR,  (与刚刚从Java转换的前一代不同)

看一下这篇文章:

http://blog.aumcode.com/2013/10/nfx-native-interoperability-of-net-with.html