gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:35:48 30 4
gpt4 key购买 nike

我正在尝试使用 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com