3

PUB/SUBデザインを使用していますが、質問は次のとおりです。

.bind()別のソケットがポートに.connect()-ed した後でポートに接続できますか、それとも別のソケットが同じアドレスに接続.bind()しようとする前にポートに接続する必要がありますか?.connect()

言い換えると:

.bind()との順序は.connect()重要ですか?

PUB(この質問は/に固有のものではないと思いますSUBが、どのデザインにも関連しています)。

4

2 に答える 2

6

ZMQ の背後にある駆動原理は、接続しようとしているソケットが既に存在するかどうかを気にしないことです。これらは、ZMQ が開発者から抽象化しようとする詳細です。いいえ、どのソケット タイプでもand の順序は重要ではbind()ありません。connect()

zmq ガイドを使用して広範な作業を行う予定がある場合は、zmq ガイドを読むことをお勧めします。関連する部分は次のとおりです。

ZeroMQ はバックグラウンドで非同期 I/O を行うことに注意してください。これを次の順序で実行している 2 つのノードがあるとします。

  • サブスクライバーはエンドポイントに接続し、メッセージを受信して​​カウントします。
  • パブリッシャーはエンドポイントにバインドし、すぐに 1,000 件のメッセージを送信します。

その場合、サブスクライバーはおそらく何も受信しません。まばたきをして、正しいフィルターを設定したことを確認してからもう一度試しても、サブスクライバーは何も受信しません。

... ここで、PUB/SUB について注意すべき重要な点があります。最初にサブスクライバーと接続したとしても、その接続はパブリッシャーが-edするまで実際には発生connect()しません。サブスクライバーが接続を完了するのを待っている間、これらのメッセージはサブスクライバーに届きません。bind()

于 2015-10-21T13:26:28.627 に答える