在我的代码中,我只能接收来自我连接的第一个发布者(在端口5556上)的消息。
在连接到第二个连接(5557)之前,我需要关闭第一个连接(5556)吗?
如果是,那么在ZeroMQ指南的声明中
"订阅者可以连接到多个发布者,每次使用一次连接呼叫。然后数据将到达并交错("公平排队"),以便没有一个发布者淹没其他人。"
短语" 每次使用一次连接呼叫"是否需要在连接第二个发布者之前关闭第一个连接?
如何同时连接多个发布者以接收来自两者的消息。
代码:
#include <zmq.hpp>
#include
int main (int argc, char *argv[])
{
zmq::context_t context (1);
zmq::socket_t subscriber (context, ZMQ_SUB);
subscriber.connect("tcp://localhost:5556");
subscriber.connect("tcp://localhost:5557");
subscriber.setsockopt(ZMQ_SUBSCRIBE, "", 0);//subscribe to all messages
// Process 10 updates
int update_nbr;
for (update_nbr = 0; update_nbr < 10 ; update_nbr++) {
zmq::message_t update;
subscriber.recv (&update);
// Prints only the data from publisher bound to port 5556
std::string updt = std::string(static_cast<char*>(update.data()), update.size());
std::cout << "Received Update/Messages/TaskList " << update_nbr <<" : "<< updt << std::endl;
}
return 0;
}
答案 0 :(得分:0)
没有。
不需要.close()
,以便启动对.connect(...)
方法的另一次调用。
PUB
-s以接收来自两者的消息?如果在 SUB
- 旁边的公平排队 { PUB | SUB }
-side政策和相同的主题过滤政策逻辑处理(版本依赖......)仍然合理:
int main (int argc, char *argv[])
{
zmq::context_t context (1);
zmq::socket_t subscriber (context, ZMQ_SUB);
subscriber.connect( "tcp://localhost:5556" ); // ipc://first will have less
subscriber.connect( "tcp://localhost:5557" ); // ipc://second protocol overheads
subscriber.setsockopt( ZMQ_SUBSCRIBE, "", 0 );// subscribe to .recv() any message
...
}
如果不是,请使用多个SUB
- 套接字实例,每个.connect()
- 分别对应各种非均衡 PUB
-s并在事件循环中使用非阻塞 .poll()
,经过严格设计,以便临时监控和处理非下的所有非平衡消息到达事件流每个PUB/SUB
(或XPUB/XSUB
)共存消息“event-streams”正在处理相关的主题过滤策略。