ZeroMQ Pub/Sub 最简单示例无法工作 - 我哪里做错了?

4 投票
1 回答
7558 浏览
提问于 2025-04-18 07:16

根据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)

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()

然后我在终端中运行这两个程序,当发布者在发布消息(也就是打印出内容)时,订阅者却一直卡在socket.recv()这行代码上,无法继续。

1 个回答

10

添加

socket.setsockopt(zmq.SUBSCRIBE, "")

到订阅者,这个方法有效!

这是更新后的 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()

撰写回答