使用二进制erlang术语通过网络发送结构化数据?

使用二进制erlang术语通过网络发送结构化数据?,erlang,dataformat,bert-rpc,Erlang,Dataformat,Bert Rpc,考虑一个客户机/服务器应用程序,其中客户机和服务器使用tcp连接来交换消息。消息可以有多种类型:文本、视频、图片等。消息以Erlang术语传输 e、 g client-->{{username,“Romeo”}、{password,“secret”}-->服务器 客户端服务器 客户端-->{tototopic,“ErlangCafe”},{msg,{text,“我爱gen_服务器}}}-->服务器 客户端-->{{toUser,“Francisco”},{msg,{jpg,}}-->服务器 我

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

e、 g

client-->{{username,“Romeo”}、{password,“secret”}-->服务器
客户端服务器
客户端-->{tototopic,“ErlangCafe”},{msg,{text,“我爱gen_服务器}}}-->服务器
客户端-->{{toUser,“Francisco”},{msg,{jpg,}}-->服务器
我想到二进制数据格式的erlang术语的原因:

1) google protobuf和apache thrift使代码复杂化,并给服务器端带来性能开销 2) json似乎不太适合二进制数据 3) Erlang term()在Erlang服务器端非常简单自然,我认为它比protobuf和thrift带来的开销要少

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

我的问题是:

1) 在这个应用程序场景中,使用erlang term()作为二进制数据格式是一种好的设计吗?
2) 在移动客户端(Android和iOS)上使用什么库进行编码/解码?

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

仅供参考,这里是二进制格式的描述,这里是一个如何将python结构手动编码为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