当我在zmq指南中阅读"持久用户和高水位标记"时,它说"HWM导致ØMQ丢弃它无法放入队列的消息",但是当我运行该示例时没有消息丢失.按ctrl + c终止durasub.py,然后继续.
durasub.py
import zmq
import time
context = zmq.Context()
subscriber = context.socket(zmq.SUB)
subscriber.setsockopt(zmq.IDENTITY, "Hello")
subscriber.setsockopt(zmq.SUBSCRIBE, "")
subscriber.connect("tcp://localhost:5565")
sync = context.socket(zmq.PUSH)
sync.connect("tcp://localhost:5564")
sync.send("")
while True:
data = subscriber.recv()
print data
if data == "END":
break
Run Code Online (Sandbox Code Playgroud)
durapub.py
import zmq
import time
context = zmq.Context()
sync = context.socket(zmq.PULL)
sync.bind("tcp://*:5564")
publisher = context.socket(zmq.PUB)
publisher.bind("tcp://*:5565")
publisher.setsockopt(zmq.HWM, 2)
sync_request = sync.recv()
for n in xrange(10):
msg = "Update %d" % n
publisher.send(msg)
time.sleep(1)
publisher.send("END")
Run Code Online (Sandbox Code Playgroud)
von*_*ond 16
上面的建议是有效的,但没有正确解决此特定代码中的问题.
这里真正的问题是durapub.py你打电话给publisher.setsockopt(zmq.HWM, 2)AFTER publisher.bind.你应该打电话给setsockoptBEFORE bind或connect.
注意:除ZMQ_SUBSCRIBE,ZMQ_UNSUBSCRIBE和ZMQ_LINGER外,所有选项仅对后续套接字绑定/连接生效.