考虑一个客户端/服务器应用程序,其中客户端和服务器使用 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)上进行编码/解码?