【发布时间】: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