ZMQ发布/订阅模式发布者连接到订阅者

时间:2016-08-08 11:09:18

标签: c++ zeromq publish-subscribe

我是ZMQ的新手,已经完成了有关发布订阅模式的教程。但对于我的申请,他们并不适用。我有两种类型的应用程序。应用程序1可以通过网络创建与多个“应用程序2”的连接,并向其发送数据。

我尝试使用发布/订阅模式实现此功能,但发布商连接到订阅者而不是连接到发布者的订阅者。

出版商:

zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_PUB);

socket.connect("tcp://localhost:5555");

std::string text = "Hello World";
zmq::message_t message(text.size());
memcpy(message.data(), text.c_str(), text.size());

socket.send(message);

订户:

zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_SUB);

socket.bind("tcp://*:5555");
const char* filter = "Hello ";
socket.setsockopt(ZMQ_SUBSCRIBE, filter, strlen(filter));

zmq::message_t request;
socket.recv(&request);

std::string message = std::string(static_cast<char*>(request.data()), request.size());

std::cout << "Message received!" << std::endl;
std::cout << message << std::endl;

发布者没有错误地完成,但订阅者卡在recv()中。是的,我按照正确的顺序(用户优先)启动它们

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案: 问题是,发布者在订阅者准备接收之前发送消息。 一个简单的

zmq_sleep(1) 

之前的

socket.send(message); 

完成了这项工作。