【发布时间】:2021-12-27 16:02:10
【问题描述】:
我正在使用 python 的 pyzmq==22.2.1,它应该支持 ZeroMQ 4.2.0(根据 API)
我正在尝试使用心跳套接字选项(ZMQ_HEARTBEAT_IVL、ZMQ_HEARTBEAT_TIMEOUT 和 ZMQ_HEARTBEAT_TTL)。但是,当我设置这些套接字选项时,我没有收到预期的 TimeoutException 或我的套接字上的任何异常。它似乎只是坐在那里无所事事。
设置这些套接字选项后的预期行为是什么? 在服务器端,服务器如何检测客户端超时并错过心跳,客户端反之亦然(是否有异常或应该抛出的东西?)。
我在下面设置了一个简单的路由器经销商回显示例:
# Server Code:
import zmq
c = zmq.Context()
s = c.socket(zmq.ROUTER)
s.setsockopt(zmq.HEARTBEAT_IVL, 1000)
s.setsockopt(zmq.HEARTBEAT_TIMEOUT, 5000)
s.setsockopt(zmq.HEARTBEAT_TTL, 5000)
s.bind('tcp://127.0.0.1:5555')
while True:
id, data = s.recv_multipart()
s.send_multipart([id, data], zmq.NOBLOCK)
# Client Code
import zmq
import time
c = zmq.Context()
s = c.socket(zmq.DEALER)
s.HEARTBEAT_IVL = 1000
s.HEARTBEAT_TIMEOUT = 5000
s.connect('tcp://127.0.0.1:5555')
i = 0
while True:
s.send(str(i).encode())
print(s.recv())
i += 1
time.sleep(1)
【问题讨论】:
标签: python-3.x zeromq pyzmq