2016-08-26 11 views

答えて

3

A '現実世界の例:株式市場のシミュレーション

ルータソケットは、サーバ(または「市場」)で、ディーラーソケットは、クライアント(または「トレーダー」)です。

  1. トレーダーは、市場に適切な「注文」メッセージを送信することで、売買注文を行います。
  2. マーケットは即座に「確認応答」メッセージで応答します
  3. いつか注文が完了すると、Marketは 「注文完了」メッセージをすべての関連トレーダーに送信します。

このような振る舞いは、パブリッシャーとサブスクライバーを両方向通信できるようにマーケットとトレーダーの両方が必要とするので、pub/subで実装するのはかなり面倒です。また、完了したすべてのトランザクションが関連するトレーダーに直接送信されるのではなく「公開」されていれば、プライバシーに関する懸念もあります。 (トレーダーBは、トレーダーAが何かを購入または売却したことを知るべきではありません)。送信とルータソケットから受信

異なるルータソケットを作る何

は、非同期応答を可能にするもう少し複雑です:

  1. 着信メッセージにより、着信メッセージの先頭に付加アイデンティティフレームを持っていますこれは、どのクライアントからのメッセージであるかを示します。
  2. 送信されたメッセージの最初のフレームが削除され、どのクライアントに応答を送信するかを識別するために使用されます。

'identity'は文字列であり、デフォルトでは接続されたクライアントごとに固有のものに設定されますが、ソケットオプションを使用してカスタムIDをクライアントソケットに設定できます。

+0

この例は、zeromqのWebサイトhttp://zguide.zeromq.org/js:rtdealerから入手してください。関連するディーラーだけがルータからメッセージを受け取ることをどのように保証しますか?私が見ることのできるところから、すべてのディーラーは同じソケットにバインドされ、同じメッセージを受け取ります。 –

+0

私はうまくいけば、より良く説明するために私の答えを更新しました。 'broker.send([identity、 ''、 'Work harder']); ' – David

+0

ブローカは実際にIDパラメータを送信しますが、この例のすべてのクライアントは次のようになります。同じTCPソケットをリッスンします。他のクライアントがメッセージを受け取らないようにするにはどうすればいいですか? –