【问题标题】:ZMQ Pub/Sub returns ETERMZMQ Pub/Sub 返回 ETERM
【发布时间】:2015-11-07 01:09:26
【问题描述】:

我在一个进程中有一个 ZMQ_PUB 套接字,连接到另一个进程中的 ZMQ_SUB 套接字,因为它是另一台服务器。我唯一需要做的就是尽可能多地发布消息。我确定它是先连接的。

我正在运行负载测试,从 PUB 发出数千条相同的消息。另一方面,我正在轮询 ZMQ_SUB 套接字,并仅在需要时接收消息。

奇怪的是,每收到 1000 条消息,zmq_poll 大约返回 3 次 ETERM。我想不通。

-- 下面的 cmets 中的解决方案。

【问题讨论】:

  • 听起来您遇到了高水位线 (HWM) 的问题。默认情况下,所有套接字都设置为 1000。要获得更多信息,我们需要查看您的一些代码。顺便说一句,我不确定您的设置是否符合您的要求 - 当 SUB 套接字访问其 HWM 时,它会丢弃 new 传入消息。所以,当你暂时忽略 PUB 套接字时会发生什么,当你回去接收更多消息时,你会在你的套接字队列中收到 oldest 消息,而不是 newest 消息,在您点击 HWM 后已全部丢弃。
  • 非常感谢,我马上去看看。
  • 事实证明,这不仅发生在 PUB/SUB 中。我的 req/rep 也会发生这种情况,只有几条消息。 zmq_poll 突然返回 -1,就好像我正在关闭上下文一样。还没有线索。
  • 您是否会像 StackOverflow Netiquette 鼓励的那样重新/考虑您的帖子以包含 MCVE 代码? 有许多聪明且知识渊博的专业人士很乐意让代码运行起来,但是没有任何 MCVE,没有太多需要审查和解决的问题。
  • 谢谢大家。原来我误解了 poll、recv 和 send 函数的返回码。每次收到信号时它都会返回 -1,并且确实会收到很多 EINTR,这很好,完全正常。我可以忽略它们并重复我试图做的事情。在我的投票中,我可以继续。如果它来自发送或接收,我可以继续尝试发送或接收,只要 errno == EINTR。问题解决了。

标签: publish zeromq polling subscribe


【解决方案1】:

原来我误解了 poll、recv 和 send 函数的返回码。每次收到信号时它都会返回 -1,并且确实会收到很多 EINTR,这很好,完全正常。我可以忽略它们并重复我正在尝试做的事情。在我的投票中,我可以继续。如果它来自发送或接收,我可以继续尝试发送或接收,只要 errno == EINTR。问题解决了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-19
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多