【问题标题】:ZeroMQ: have to sleep before sendZeroMQ:发送前必须休眠
【发布时间】:2013-10-26 21:39:15
【问题描述】:

我正在用 Forwarder 设备(使用 pyzmq)编写 zeromq 演示

代码如下(参考https://learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/devices/forwarder.html):

转发器.py

import zmq

context = zmq.Context()
frontend = context.socket(zmq.SUB)
frontend.bind('tcp://*:5559')
frontend.setsockopt(zmq.SUBSCRIBE, '')

backend = context.socket(zmq.PUB)
backend.bind('tcp://*:5560')

zmq.device(zmq.FORWARDER, frontend, backend)

sub.py

import zmq

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect('tcp://localhost:5560')
socket.setsockopt(zmq.SUBSCRIBE, '')

while True:
    print socket.recv()

pub.py

import zmq, time

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.connect('tcp://localhost:5559')
# time.sleep(0.01)
socket.send('9 hahah')

我在终端运行python forwarder.pypython sub.py

然后运行python pub.py,订阅者收不到消息。但是,如果我在发送前睡一会儿(例如 0.01 秒),它会起作用。

所以我的问题是,为什么我在发送之前要sleep?谢谢。

【问题讨论】:

    标签: python zeromq pyzmq


    【解决方案1】:

    它被称为Slow Joiner 综合症。阅读guide,有一些方法可以避免使用 pub/sub syncing

    【讨论】:

    • 具体来说,查看pub-sub synchronization example 以查看它是否正常工作。如图所示,您将使用一对额外的 REP/REQ 套接字来同步您的 pubsub 套接字。
    • 它还说,它显示的示例在订阅者中具有不可靠的 1 秒延迟,然后建议您基本上需要从发布者向订阅者发送虚假数据,直到所有内容都被刷新。看看最后的“更强大的模型”简介。
    • 一切都是404。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2017-02-28
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    相关资源
    最近更新 更多