0

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

例如

 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)上进行编码/解码?

4

1 回答 1

0

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

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

这里还有一些其他选项Erlang Universal Binary Format?有人用吗?

于 2014-03-29T17:56:54.820 回答