我是 ZERMQ 的新手。 ZeroMQ 具有 TCP、INPROC 和 IPC 传输。我正在寻找在 Winx64 和 python 2.7 中使用 python 和 inproc 的示例,这些示例也可以用于 Linux。
另外,我一直在寻找 UDP 传输方法,但找不到示例。
我发现的唯一例子是
import zmq
import zhelpers
context = zmq.Context()
sink = context.socket(zmq.ROUTER)
sink.bind("inproc://example")
# First allow 0MQ to set the identity
anonymous = context.socket(zmq.XREQ)
anonymous.connect("inproc://example")
anonymous.send("XREP uses a generated UUID")
zhelpers.dump(sink)
# Then set the identity ourself
identified = context.socket(zmq.XREQ)
identified.setsockopt(zmq.IDENTITY, "Hello")
identified.connect("inproc://example")
identified.send("XREP socket uses REQ's socket identity")
zhelpers.dump(sink)
我正在考虑的用例是:类似 UDP 的信息分发。使用 TCP 测试推/拉会更快,或者 inproc 会更快。
这是测试示例>........................
服务器:
import zmq
import time
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("inproc://example2")
while True:
# Wait for next request from client
message = socket.recv()
print "Received request: ", message
# Do some 'work'
time.sleep (1) # Do some 'work'
# Send reply back to client
socket.send("World")
客户:
import zmq
context = zmq.Context()
# Socket to talk to server
print "Connecting to hello world server..."
socket = context.socket(zmq.REQ)
socket.connect ("inproc://example2")
# Do 10 requests, waiting each time for a response
for request in range (1,10):
print "Sending request ", request,"..."
socket.send ("Hello")
# Get the reply.
message = socket.recv()
print "Received reply ", request, "[", message, "]"
错误讯息:
socket.connect ("inproc://example2")
File "socket.pyx", line 547, in zmq.core.socket.Socket.connect (zmq\core\socket.c:5347)
zmq.core.error.ZMQError: Connection refused
如果(且仅当)您使用 ZMQ_PUB 或 ZMQ_SUB 套接字 - 在您给出的示例中您没有这样做,您使用 ROUTER、XREQ 等 - 您可以使用 UDP,或更准确地说,UDP 多播 通过
“epgm://主机:端口”
EPGM代表
Encapsulated PGM
,即封装在UDP中的PGM,它比原始PGM更兼容现有的网络基础设施。
另请参阅 http://api.zeromq.org/2-1:zmq-pgm
但我不知道 UDP 对单播场景有任何支持。
自 2016 年 3 月起,ZeroMQ 已支持线程安全 UDP:
tests/test_udp.cpp
、tests/test_radio_dish.cpp
当我的pyzmq和zmq的版本是旧版本时,我也遇到了同样的问题,我将版本升级到15.2.0,然后解决了问题,我使用的ipc地址前缀是“inproc://”
操作系统:win7-x64 蟒蛇:2.7.6
现在是 2024 年。如果您不介意在运输过程中丢失包裹,您可能会想要使用 UDP。这对于音频或视频(流媒体)来说完全没问题,但如果您期望得到正确的响应,则不然。如果您需要支持 windows 和 all,请使用 inproc;如果您支持适当的平台(例如 linux/BSD),请使用 ipc。
我们使用 ipc 在微服务之间进行通信,速度非常快。如果您需要将服务分发到多个服务器上,请使用 TCP。它效果很好而且速度很快。