ZeroMQ Pub / Sub最简单的示例不起作用-我在做什么错?

Tzu*_*hay 2 python sockets zeromq

遵循zmq文档中示例,这是我的一些小改动。

Publisher.py

import zmq
import random
import time

port = "5556"

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://127.0.0.1:%s" % port)


while True:
    topic = random.randrange(9999,10005)
    messagedata = random.randrange(1,215) - 80
    print "%d %d" % (topic, messagedata)
    socket.send("%d %d" % (topic, messagedata))
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

Subscriber.py

import sys
import zmq

port = "5556"

context = zmq.Context()
socket = context.socket(zmq.SUB)

print "Collecting updates from weather server..."
socket.connect ("tcp://127.0.0.1:%s" % port)


while True:
    print socket.recv()
Run Code Online (Sandbox Code Playgroud)

然后,我从终端执行它们,当发布者发布(即打印行)时,订阅者永远不会离开 socket.recv()

Tzu*_*hay 5

socket.setsockopt(zmq.SUBSCRIBE, "")
Run Code Online (Sandbox Code Playgroud)

给订户,把戏!

这是更新的subscriber.py

import sys
import zmq

port = "5556"

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.setsockopt(zmq.SUBSCRIBE, "")

print "Collecting updates from weather server..."
socket.connect ("tcp://127.0.0.1:%s" % port)

while True:
    print socket.recv()
Run Code Online (Sandbox Code Playgroud)

  • 此修复程序对我有用,但是请注意,在python 3中,您将收到`TypeError:不允许的unicode,请使用setsockopt_string`,但可以通过调用`socket.setsockopt(zmq.SUBSCRIBE,b“”)`来解决此问题(注意第二个参数中的`b“”`发送纯字节字符串) (3认同)