ドキュメントにあるように、ZMQ ソケットはスレッドセーフではありません。したがって、タイトルに対する答えは「いいえ」だと思います。
それでも、ZMQ を使用してノンブロッキングのリクエスト/リプライパターンを実装する方法がわかりません。
具体的には、クライアントには、(スレッド セーフな) メッセージ キューからのメッセージを処理するビジネスを行うメイン スレッドがあります。メッセージは、ネットワーク、タイマー、I/O などのさまざまなソースから送信されます。メイン スレッドがリモート サーバーに要求を送信したい場合がありますが、応答を待ちたくない場合があります (応答には時間がかかる場合があります)。 )。
通常、次の 2 つのスレッドを使用します。
- メインのメッセージ処理ループ スレッド。これは
send()
REQ/REP ソケットで要求します - サーバーからの応答を待機する補助リスナー スレッド。これは、ソケットでブロッキングを使用
recv()
し、メイン スレッドのキューに応答をプッシュします。
ZeroMQ を使用してこれを達成するにはどうすればよいですか? 補助スレッドはソケットを開きinproc
、メイン スレッドからのメッセージをリッスンする必要がありますか?