我目前正在探索测试我的 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 代替?