我正在学习二郎,我对mnesia db非常着迷.我想使用erlang作为后端在C#/ F#中构建一些真实世界的应用程序.
我正在寻找一个很好的解决方案来与外界的erlang节点进行通信.
到目前为止我发现了什么:
(A)OTP.net,一个实现"本地"erlang通信协议的开源.net库
问题在这里:
图书馆不是很成熟
我不喜欢从Java移植的对象模型(太多几乎完全相同的BCL类复制品)
我不喜欢用于连接的线程模型.
需要许多开放的TCP端口
缺乏安全感
(B)在erlang中使用端口/套接字并实现自定义协议.
问题在这里:
我没有任何经验
未来版本难以维护/扩展
你对这个话题有什么建议和经验吗?
我应该在OTP.net库上工作以满足我的需求还是尝试从头开始实施新协议?
那么JSON或REST解决方案呢?是否有任何erlang库可以解决这个问题?
端口/套接字解决方案是一个好主意,并不像看起来那么难.谷歌的协议缓冲正是您所需要的.它非常易于使用,高效且易于维护.它有C#,erlang,java,python等实现(参见OtherLanguages和开发者指南)
您可以使用协议缓冲区来定义请求和响应协议结构.然后使用它在erlang和任何其他支持的语言之间进行通信.本教程将解释一切.之后,您需要做的就是通过端口发送响应.
这种方法的优点是:
您可以在将来轻松扩展和更改协议
它比REST方法更有效
它目前被Google用于几乎所有内部RPC协议和文件格式