ZeroMQ:发送前必须睡觉

won*_*ng2 6 python zeromq pyzmq

我用Forwarder设备写了一个zeromq演示(用pyzmq)

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

forwarder.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)
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

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')
Run Code Online (Sandbox Code Playgroud)

我跑python forwarder.py,python sub.py在终端

然后运行python pub.py,订阅者无法获取消息.但是,如果我在发送之前睡了一点时间(例如0.01秒),它就可以工作了.

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

raf*_*ian 12

它被称为慢乔纳综合症.阅读指南,有方法可以使用发布/ 订阅同步来避免它.

  • 一切都是404。 (5认同)
  • 具体来说,请查看[pub-sub同步示例](http://zguide.zeromq.org/page%3aall#Node-Coordination)以查看其是否正常工作.如图所示,您将使用额外的REP/REQ套接字同步您的[pub](http://zguide.zeromq.org/py:syncpub)和[sub](http://zguide.zeromq) .org/py:syncsub)套接字. (4认同)