我使用ZeroMQ实现了一个简单的请求-应答体系结构。这对于pyzmq2.1.11版是正确的。不幸的是,当我在PyZMQ 14.0.0版上测试它时,sender(REQ)可以发送到路由器,然后路由器接收到它的消息并发送到接收方(REP),但是接收方没有接收到消息! 当我将PyZMQ从2.1.11版升级到14.0.0版时遇到了这个问题。在
请求<;->;路由器<;->;代表
这是我的代码:
发件人.py
import zmq
import time
if __name__=='__main__':
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.setsockopt(zmq.IDENTITY, "S")
socket.connect("tcp://127.0.0.1:6660")
i = 0
while True:
i += 1
socket.send("R", zmq.SNDMORE)
socket.send("", zmq.SNDMORE)
socket.send("Message: %d" % i)
print("Message : %d sent" % i)
fromAddr = socket.recv()
empty = socket.recv()
resp = socket.recv()
print("%s received!" % str(resp))
time.sleep(1)
路由器.py
^{pr2}$接收器.py
import zmq
import time
if __name__=='__main__':
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.setsockopt(zmq.IDENTITY, "R")
socket.connect("tcp://127.0.0.1:6660")
while True:
print("Wating for request...")
toAddr = socket.recv()
empty = socket.recv()
req = socket.recv()
print("%s received!" % str(req))
socket.send(toAddr, zmq.SNDMORE)
socket.send(empty, zmq.SNDMORE)
socket.send("Reply to %s" % str(req))
当我使用这种架构时:
DEALER
不路由到多个接收器。DEALER
只使用循环方法向接收者发送消息。如果可以使用ROUTER
代替DEALER
,则可以将消息路由到特定的接收方,并在这些接收者之间进行循环。在
根据@nos的说法,ROUTER-to-REP是无效组合,而ROUTER-to-ROUTER socket是有效的组合。很简单,我把REP套接字改成了路由器!修订后的代码如下:
路由器到REP套接字是无效的组合,如下所述:http://zguide.zeromq.org/page:all#Request-Reply-Combinations
相关问题 更多 >
编程相关推荐