正如文档所说,ZMQ 套接字不是线程安全的。所以我假设标题的答案是“不”。
不过,我不知道如何使用 ZMQ实现非阻塞请求-回复模式:
具体来说,客户端有一个主线程,它继续处理来自(线程安全)消息队列的消息。消息来自各种来源,例如网络、计时器、I/O 等。有时主线程希望向远程服务器发送请求,但它不想等待响应(这可能需要一段时间才能到达)。
通常,我会使用两个线程:
- 主消息处理循环线程。这将
send()
在 REQ/REP 套接字上请求 - 一个辅助侦听器线程,它将等待来自服务器的响应。这将在套接字上使用阻塞
recv()
,并将响应推送到主线程的队列。
我将如何使用 ZeroMQ 实现这一目标?辅助线程是否应该打开一个inproc
套接字并监听来自主线程的消息?