我有这段代码
context = zmq.Context()
app_worker = context.socket(zmq.PUSH)
app_worker.bind("tcp://127.0.0.1:9005")
app_sub = context.socket(zmq.SUB)
app_sub.connect("tcp://127.0.0.1:9004")
app_sub.setsockopt(zmq.SUBSCRIBE,'sometopic')
while True:
msg = app_sub.recv()
msg_data = msg.split(' ',1)
app_worker.send_json(msg_data[1])
print msg_data[1]
但是当我运行它时,它无法接收来自发布者的任何消息,但是当我评论此行时
app_worker = context.socket(zmq.PUSH)
app_worker.bind("tcp://127.0.0.1:9005")
它突然起作用了。在zeromq指南第5章黑盒图案中说明这是可能的。如果是的话,我在这里做错了什么?
答案 0 :(得分:0)
您提供的数据不足以100%保证解决此问题。
但是根据您发布的内容,最明显的问题是端口9005已被其他人绑定。
答案 1 :(得分:0)
如果没有下游节点来拉消息,很有可能app_worker.send_json(msg_data[1])
正在阻塞(整个线程)。
将send_json
设置为非阻止模式,并检查返回的错误/异常
app_worker.send_json(msg_data[1], zmq.NOBLOCK)
当您注释掉bind
时,它“起作用”的原因是因为发送只是失败而没有阻塞。