使用二进制erlang术语通过网络发送结构化数据?

时间:2014-03-28 17:03:05

标签: erlang dataformat bert-rpc

考虑一个客户端/服务器应用程序,其中客户端和服务器使用tcp连接来交换消息。消息可以有多种类型:文本,视频,图片等。消息以Erlang术语传输。

e.g。

 client -->         {{username, "Romeo"}, {password, "secret"}}           --> server
 client <--                      {authresult, 'PASS'}                     <-- server
 client -->         {{toUser, "Juliet"}, {msg, {text, "hello!"}}}         --> server
 client --> {{toTopic, "ErlangCafe"}, {msg, {text, "i love gen_server}}}  --> server
 client --> {{toUser, "Francisco"}, {msg, {jpg, <<binary data>>}}}        --> server

我正在考虑二进制数据格式的erlang术语的原因:

1)google protobuf和apache thrift使代码复杂化,并给服务器端带来性能开销 2)json似乎不太适合二进制数据 3)Erlang term()在erlang服务器端是简单而自然的,我认为它比protobuf和thrift带来更少的开销

服务器在发送数据之前只通过term_to_binary()对数据进行编码,并通过binary_to_term()对接收到的数据进行解码。在发送数据并解码接收的数据之前,客户端使用库将数据编码为二进制erlang术语。

我的问题是:

1)在此应用场景中使用erlang term()作为二进制数据格式是否很好? 2)在移动客户端(Android和iOS)上使用哪些库进行编码/解码?

1 个答案:

答案 0 :(得分:0)

1,2。如果只在erlang应用程序之间使用它就可以了。但是erlang的二进制格式并没有被广泛接受和使用。我会选择protobuffs或节俭。

仅供参考,这里是二进制格式描述http://erlang.org/doc/apps/erts/erl_ext_dist.html,这是一个如何将python结构手动编码为erlang二进制格式的示例(俄语说明)。

以下是其他一些选项Erlang Universal Binary Format? Anyone using it?