5

ZeroMQ を使用するサーバー アプリケーションを設計しています。核心的な詳細には立ち入らずに、サーバーは (クエリ要求から)(eventid, eventstring)タプルを格納して提供します。

私の質問は、ワイヤ プロトコルの設計に関するものです。タプルを端から端まで送信したいと思います。2 つのオプションが表示されます。

  • タプルを (protobuf などを使用して) シリアル化し、単一のメッセージとして送信します。
  • マルチパート メッセージとしてタプルを送信します。最初の部分には eventid が含まれ、2 番目の部分には eventstring が含まれます。

これらの 2 つのオプションのいずれかが、他のオプションよりも望ましいものですか? The ZeroMQ Guideを読むと、マルチパート メッセージ エンベロープを多用するAdvanced Request-Reply パターンに関する章があります。これは、ユーザーとして、将来、より高度なメッセージ パターンを有効にするために、単一のメッセージに固執する必要があるということですか?

4

2 に答える 2

2

ガイドには、シリアル化について説明しているセクションがあります。

http://zguide.zeromq.org/page:all#Serializing-Your-Data

2つのフィールドがある場合は非常に簡単なので、機能する限り、どの形式を使用してもIMOは関係ありません。

于 2012-11-21T06:29:30.987 に答える
1

Majordomoプロトコルのワイヤープロトコルを確認することをお勧めします。この例から、構造内の各「フィールド」が個別のフレームとして送信されていることがわかります。これは非常にうまく機能し、十分にサポートされています。

バイトレイアウトを定義して、データを単一のフレームとして送信することもできます。エンディアンの問題に対処する必要がありますが(リトルエンディアンとビッグエンディアンのプラットフォームでコードを実行している場合)、それはかなり簡単に対処できます。方法がわからない場合は、Majordomoのようなフレームテクニックを使用してください。

1フレームを使用する場合と複数フレームを使用する場合では、パフォーマンスの違いはごくわずかです。1秒あたりのギガビットを送信しない限り、問題になる可能性はほとんどありません。いつものように、「最適化」する前に特定のケースを測定するためのベンチマークを行い、メッセージごとに200ナノ秒を節約するために多くの時間と労力を浪費します。

于 2012-07-18T11:52:39.620 に答える