我正在开发一个应用程序,我想使用ZeroMQ来连接不同类型的节点,这些节点可以在系统运行时添加和删除。这意味着我希望随着节点的出现随时调用zmq_connect()
或zmq_disconnect()
。
某些连接使用ZMQ_REQ
类型的套接字,当没有对等项可用时阻塞。因此,可能会发生一个节点在zmq_recv()中被阻塞,而没有任何节点可用于处理请求。如果新节点可用,我想使用zmq_connect()连接套接字。我能看到如何做到这一点的唯一方法是从不同的线程调用zmq_connect()。但文档清楚地表明,zmq_socket
实例不能同时从多个线程中使用。
如何解决此问题,在ZMQ_REQ
套接字上发送消息而没有任何连接(或无法建立的连接),然后添加连接并处理等待请求?
答案 0 :(得分:0)
如果没有准备好消息,则不应使用zmq_recv()
。这样你就可以避免阻塞你的线程。而是检查确实有消息要接收。实现此目的的最简单方法是使用poller
。既然您还没有说明您使用的图书馆或语言,我无法为您提供正确的示例,但我想来自ZeroMQ指南的示例here中的C示例可以有用。
根据我的经验,构建基于ZeroMQ的应用程序最有效的方法是构建一个对消息作出反应的线程节点,并在必要时根据时间间隔运行方法。
为了建立一个类似于你所谈论的系统,我建议你看看真棒Service Discovery的ZeroMQ Guide章。