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

ZMQ Publish/Subscribe pattern publisher connects to subscribers

我是 ZMQ 的新手,已经完成了有关发布订阅模式的教程。但是对于我的应用程序,它们并不完全适用。我有两种类型的应用程序。应用程序一可以通过网络创建与多个 "Applications two" 的连接并向它们发送数据。

我尝试使用 Publish/Subscribe 模式实现它,但不是订阅者连接到发布者,而是发布者连接到订阅者。

出版商:

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() 中。是的,我以正确的顺序开始它们(订阅者优先)

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

zmq_sleep(1) 

之前
socket.send(message); 

完成任务。