c++ - zeromq pub sub 上丢失的消息

标签 c++ publish-subscribe zeromq

我正在尝试使用 zeromq 框架实现 pub sub 设计模式。 这个想法是启动订阅者,然后启动发布者。 订阅者将收听 100 条消息,发布者将发布 100 条消息。 到目前为止,一切都很好... 然而,实际发生的情况是,即使在发布者启动时订阅者已经启动并运行,订阅者也不会收到所有消息(如果发布者发送至少 500 条消息,订阅者将收到 100 条消息)信息)。发布者发送的第一条消息似乎没有发送给订阅者。

有什么想法吗?

提前致谢, 奥马尔。

订阅者代码(在发布者之前发布)

int i=0;
zmq::context_t context (1);
zmq::socket_t subscriber (context, ZMQ_SUB);
subscriber.connect("tcp://localhost:5556");
subscriber.setsockopt(ZMQ_SUBSCRIBE, "", 0);

for (int update_nbr = 0; update_nbr < 100; update_nbr++) 
{        
    zmq::message_t update;
    subscriber.recv(&update);
    i++;
    std::cout<<"receiving  :"<<i<<std::endl;
}

发布者代码(在订阅者之后发布)

zmq::context_t context (1);
zmq::socket_t publisher (context, ZMQ_PUB);
publisher.bind("tcp://*:5556");

int i = 0;
for (int update_nbr = 0; update_nbr < 100; update_nbr++) 
{        
    //  Send message to all subscribers
    zmq::message_t request (20);

    time_t seconds;
    seconds = time (NULL);

    char update [20]="";
    sprintf (update, "%ld", seconds);

    memcpy ((void *) request.data (), update,strlen(update));
    publisher.send(request);
    i++;
    std::cout << "sending :" << i << std::endl;

}

最佳答案

http://zguide.zeromq.org/page:all#Missing-Message-Problem-Solver并在该网页上搜索“slow joiner”。

基本上,建立连接需要一点时间(几毫秒),在此期间可能会丢失大量消息。发布者需要在开始发布之前稍微休眠,或者(更好)它需要显式地与订阅者同步。

关于c++ - zeromq pub sub 上丢失的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7470472/

相关文章:

c++ - 如何在单例中传递参数

c++ - 重载 Iostream C++

c++ - SQLite 语法在 "S"附近不正确

java - 如何在 REST API 中拥有订阅者?

node.js - Redis Pub/Sub 聊天室

c# - C# 应用程序和 Python 应用程序之间通信的简单方法

c++ - 在 C++ 中删除动态字符**

azure - 是否可以将 Azure 事件中心以 Pub/Sub 方式配置到另一个事件中心而无需编码?

python - ZMQ 发布/订阅可靠/可扩展设计

c++ - ZMQ 民意调查不起作用