【问题标题】:ZMQ Publish/Subscribe pattern publisher connects to subscribersZMQ 发布/订阅模式发布者连接订阅者
【发布时间】:2016-12-14 03:20:12
【问题描述】:

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

我尝试使用发布/订阅模式来实现这一点,但不是订阅者连接到发布者,而是发布者连接到订阅者。

出版商:

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

【问题讨论】:

    标签: c++ zeromq publish-subscribe


    【解决方案1】:

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

    zmq_sleep(1) 
    

    之前

    socket.send(message); 
    

    完成了任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多