考虑一个客户端/服务器应用程序,其中客户端和服务器使用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)上使用哪些库进行编码/解码?
答案 0 :(得分:0)
1,2。如果只在erlang应用程序之间使用它就可以了。但是erlang的二进制格式并没有被广泛接受和使用。我会选择protobuffs或节俭。
仅供参考,这里是二进制格式描述http://erlang.org/doc/apps/erts/erl_ext_dist.html,这是一个如何将python结构手动编码为erlang二进制格式的示例(俄语说明)。