我正在使用ZeroMQ来促进我需要的发布/订阅环境.我正在使用Python(使用EventLoop)在机器A上运行发布服务器,现在我在机器B上有一个用C++运行的用户和在机器C上用Python运行的第二个用户(使用EventLoop).
如果机器B在机器C之前订阅机器A,则B获得订阅消息而C不获得.此外,如果我查看机器A上已建立的连接,那么只存在机器B的连接而不存在C的连接.如果机器C在B之前订阅了A,那么它就是另一种方式.
这是我的发布商代码:
import zmq
from zmq.eventloop import ioloop, zmqstream
ioloop.install()
context = zmq.Context(1)
socket = context.socket(zmq.PUB)
publisher = zmqstream.ZMQStream(socket)
socket.bind("tcp://*:1337")
def publish():
publisher.send_multipart(("heartbeat", "OHAI"))
ioloop.PeriodicCallback(publish, 5000).start()
ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)
这是我的Python订阅者代码:
import zmq
from zmq.eventloop import ioloop, zmqstream
ioloop.install()
context = zmq.Context(1)
socket = context.socket(zmq.SUB)
subscriber = zmqstream.ZMQStream(socket)
socket.setsockopt(zmq.SUBSCRIBE, "heartbeat")
socket.connect("tcp://pub.local:1337")
def subscription(message):
print "Message Received: %s" % (message[1])
subscriber.on_recv(subscription)
ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)
为什么我的发布者不接受多个传入的订阅者套接字?值得注意的是,多个用户在机器A上运行它们时工作正常,但我不认为这是防火墙问题,因为我测试了B和C的用户连接到A,防火墙被禁用.
| 归档时间: |
|
| 查看次数: |
3697 次 |
| 最近记录: |