我目前正在探索測試我的zeromq應用程序的可能性。我的印象是,我可以在同一個線程中擁有一個發佈者/訂閱者,讓發佈者發佈,並且訂閱者訂閱它而不會丟失消息。但是,當我讓發佈者發送一些消息時,沒有任何消息傳遞給訂閱者。來自單線程的ZeroMQ進程間通信丟失消息
這裏是我使用的代碼:
import zmq
def main():
ctx = zmq.Context.instance()
sender = ctx.socket(zmq.PUB)
sender.setsockopt(zmq.HWM, 1000)
sender.bind('tcp://*:10001')
rcvr = ctx.socket(zmq.SUB)
rcvr.setsockopt(zmq.HWM, 1000)
rcvr.connect('tcp://127.0.0.1:10001')
rcvr.setsockopt(zmq.SUBSCRIBE, "")
for i in range(100):
sender.send('%i' % i)
while True:
try:
print rcvr.recv(zmq.NOBLOCK)
except zmq.ZMQError:
break
if __name__ == '__main__':
main()
當運行這個,我沒有得到任何輸出。
讓我感到震驚的是接收方在發送方發送之前已連接,因此應排隊這些消息。或者,這是一個錯誤的假設,我應該用PUSH/PULL來代替?
查看[guide](http://zguide.zeromq.org/page:all#Getting-the-Message-Out)並搜索** slow joiner **。 – 2013-04-20 15:22:12