【问题标题】:Use binary erlang term for sending structured data over network?使用二进制 erlang 术语通过网络发送结构化数据?
【发布时间】:2014-05-08 06:42:54
【问题描述】:

考虑一个客户端/服务器应用程序,其中客户端和服务器使用 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 server 端简单自然,我认为它带来的开销比 protobuf 和 thrift 少

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

我的问题是:

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

【问题讨论】:

    标签: erlang dataformat bert-rpc


    【解决方案1】:

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

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

    这里还有一些其他选项Erlang Universal Binary Format? Anyone using it?

    【讨论】:

      猜你喜欢
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      相关资源
      最近更新 更多