PUSHer と複数の PULLer で構成される ZeroMQ ネットワークがあります。問題は、puller の数が不明であり、場合によっては 0 になる可能性があることです。後者が発生した場合、socket.send(msg) は返されないようです。私の記憶が確かなら、これは PUB/SUB ソケットでは起こりません。
パイプの反対側に引き手がない場合に、パケットを押し込まないようにする方法はありますか?
ありがとう!
PUSHer と複数の PULLer で構成される ZeroMQ ネットワークがあります。問題は、puller の数が不明であり、場合によっては 0 になる可能性があることです。後者が発生した場合、socket.send(msg) は返されないようです。私の記憶が確かなら、これは PUB/SUB ソケットでは起こりません。
パイプの反対側に引き手がない場合に、パケットを押し込まないようにする方法はありますか?
ありがとう!
いくつかの方法でブロックを回避できます。
簡単な答え: PUSH/PULL と PUB/SUB のセマンティクスは異なります。
PUSH/PULL は、プッシュされたメッセージをプーラー間で分配します。ファンアウトしたいときにこれを使用し、処理が確実に行われるようにします。誰も聞いていない場合は、ブロックされます。
PUB/SUB は、発行されたメッセージをすべてのサブスクライバーにブロードキャストします。誰も聞いていない場合、メッセージは失われます。
あなたのユースケースには PUB/SUB の方が適しているように思えます。メッセージが失われるファンアウトは、結局のところ意味がありません。