【问题标题】:zeromq sub-pub mode, block and lostzeromq sub-pub 模式,阻塞和丢失
【发布时间】:2013-05-15 13:15:02
【问题描述】:

我在我的应用程序中使用 zeromq 子发布模式,但我遇到了一个问题: 我启动子应用并订阅了消息,稍后再启动发布应用,发布应用在半小时或更长时间内不会发布任何消息,此后发布应用会向子应用发布消息,但子应用应用程序在那里被阻止,没有任何消息或某些消息丢失。

如果有人知道问题出在哪里?提前谢谢你。

【问题讨论】:

  • Publisher:#include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { void* context = zmq_ctx_new(); void* server = zmq_socket(context, ZMQ_PUB); zmq_bind(服务器, "tcp://192.168.1.212:5555"); printf("等待一个半小时\n");睡眠(1000*60*60*1.5); while(1) { 字符缓冲区 [256] = {0}; sprintf_s(buffer, "%s", "Hello World!"); zmq_send(服务器, 缓冲区, 256, 0); printf("发送: %s\n", 缓冲区);睡眠(1000*60); } 返回 0; }
  • 订阅者:#include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { void* context = zmq_ctx_new(); void* socket = zmq_socket(context, ZMQ_SUB); zmq_connect(socket, "tcp://202.101.xxx.xx:5555"); zmq_setsockopt(socket, ZMQ_SUBSCRIBE, "", 0); while(1) { 字符缓冲区 [256] = {0}; zmq_recv(socket, 缓冲区, 256, 0); printf("recv: %s\n", 缓冲区); } 返回 0; }
  • 我认为是因为我没有在我的套接字中设置 ZMQ_TCP_KEEPALIVE,对吗?

标签: block zeromq


【解决方案1】:

理想情况下,您应该先启动发布者,然后是订阅者。

另外,请阅读指南中有关 PUB 和 SUB 之间的消息可能丢失的情况的这一部分:http://zguide.zeromq.org/page:all#Getting-the-Message-Out

如果没有任何其他信息或代码 sn-ps 您正在做什么,很难解决此问题。

【讨论】:

  • 其实sn-ps的代码很简单,发布方每分钟向订阅者发布一条消息,订阅者订阅该消息。发布方每分钟发布一次消息时一切正常,但是当我在发布方发布消息前一个多小时添加睡眠时,一小时后,它发布消息,但现在,订阅者无法收到任何消息。双方在不同的互联网机器上,而不是内部网络。
猜你喜欢
  • 2011-11-20
  • 2016-06-02
  • 2013-07-22
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多