等待zmq_send()或zmq_recv()

时间:2015-07-16 01:54:30

标签: multithreading zeromq

我正在开发一个应用程序,我想使用ZeroMQ来连接不同类型的节点,这些节点可以在系统运行时添加和删除。这意味着我希望随着节点的出现随时调用zmq_connect()zmq_disconnect()

某些连接使用ZMQ_REQ类型的套接字,当没有对等项可用时阻塞。因此,可能会发生一个节点在zmq_recv()中被阻塞,而没有任何节点可用于处理请求。如果新节点可用,我想使用zmq_connect()连接套接字。我能看到如何做到这一点的唯一方法是从不同的线程调用zmq_connect()。但文档清楚地表明,zmq_socket实例不能同时从多个线程中使用。

如何解决此问题,在ZMQ_REQ套接字上发送消息而没有任何连接(或无法建立的连接),然后添加连接并处理等待请求?

1 个答案:

答案 0 :(得分:0)

如果没有准备好消息,则不应使用zmq_recv()。这样你就可以避免阻塞你的线程。而是检查确实有消息要接收。实现此目的的最简单方法是使用poller。既然您还没有说明您使用的图书馆或语言,我无法为您提供正确的示例,但我想来自ZeroMQ指南的示例here中的C示例可以有用。

根据我的经验,构建基于ZeroMQ的应用程序最有效的方法是构建一个对消息作出反应的线程节点,并在必要时根据时间间隔运行方法。

为了建立一个类似于你所谈论的系统,我建议你看看真棒Service DiscoveryZeroMQ Guide章。