0

クライアントとサーバーが 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 や倹約よりも

サーバーは、データを送信する前に term_to_binary() でエンコードし、受信したデータを binary_to_term() でデコードするだけです。クライアント側はライブラリを使用して、データを送信する前にバイナリ erlang 用語にエンコードし、受信したデータをデコードします。

私の質問は次のとおりです。

1) このアプリケーション シナリオでバイナリ データ形式として erlang term() を使用するのは適切な設計ですか? 2) モバイル クライアント (Android および iOS) でのエンコード/デコードに使用するライブラリは?

4

1 に答える 1

0

1,2。erlang アプリケーション間でのみ使用する場合は問題ありません。しかし、erlang のバイナリ形式は広く受け入れられておらず、使用されていません。私はプロトバフか倹約を選びます。

参考までに、バイナリ形式の説明http://erlang.org/doc/apps/erts/erl_ext_dist.htmlと、python 構造を手動で erlang バイナリ形式にエンコードする方法の例を次に示します (ただし、ロシア語での説明)。

他のオプションもいくつかありますErlang Universal Binary Format? 使ってる人いますか?

于 2014-03-29T17:56:54.820 に答える