ZMQ中的乒乓心跳
Ping pong heartbeat in ZMQ
我一直在阅读关于心跳的 ZMQ documentation 并且读到应该使用乒乓方法而不是用于 Paranoid Pirate 模式的方法
For Paranoid Pirate, we chose the second approach. It might not have
been the simplest option: if designing this today, I'd probably try a
ping-pong approach instead.
但是,我在任何地方都找不到关于乒乓模式的文档(以及为什么它是首选?)。唯一可能的代码示例是 pyzmq 示例中的 ping.py and pong.py。
这些足够的例子可以证明双向心跳吗?如果是这样,"pong" 是如何检测到 "ping" 不再活着的?也有关于没有有效载荷的说法,但是 ping message 不也被认为是有效载荷吗?
One peer sends a ping command to the other, which replies with a pong
command. Neither command has any payload
同样,这些示例可能不构成此方法的完整实现。如果有人可以分享一些经验、描述或代码示例,我将不胜感激。
我的目标是为经纪人和工人(路由器经销商)添加心跳功能。 worker 和 broker 都应该检测到合作伙伴不再可用,并且 (a) 注销 worker(如果 broker 检测到 worker 已经离开),或者 (b) 稍后尝试重新连接(如果 worker 丢失了它的连接到经纪人)。工作人员在忙碌时不需要,因为无论如何它都不会在经纪人的空闲工作人员队列中等待新工作。
ZeroMQ 不提供任何机制来帮助您查明另一端的套接字是否处于活动状态。
因此,心跳模式的标准场景(我认为是最方便的)是带超时的心跳。
您需要客户端和服务器上的套接字,它们在不同的线程中工作。还有一个轮询器。
轮询器示例:
p = zmq.Poller()
p.register(socket, zmq.POLLIN)
Сlient 向服务器发送消息并超时轮询套接字。选择最适合您的超时值,并且会清楚地表明服务器不可用。
轮询示例:
msg = dict(p.poll(timeout))
if socket in msg and msg[socket] == zmq.POLLIN:
# we get heartbeat from server
else:
# timeout - server unavailable
服务器也一样。
我认为这会有所帮助。
我一直在阅读关于心跳的 ZMQ documentation 并且读到应该使用乒乓方法而不是用于 Paranoid Pirate 模式的方法
For Paranoid Pirate, we chose the second approach. It might not have been the simplest option: if designing this today, I'd probably try a ping-pong approach instead.
但是,我在任何地方都找不到关于乒乓模式的文档(以及为什么它是首选?)。唯一可能的代码示例是 pyzmq 示例中的 ping.py and pong.py。
这些足够的例子可以证明双向心跳吗?如果是这样,"pong" 是如何检测到 "ping" 不再活着的?也有关于没有有效载荷的说法,但是 ping message 不也被认为是有效载荷吗?
One peer sends a ping command to the other, which replies with a pong command. Neither command has any payload
同样,这些示例可能不构成此方法的完整实现。如果有人可以分享一些经验、描述或代码示例,我将不胜感激。
我的目标是为经纪人和工人(路由器经销商)添加心跳功能。 worker 和 broker 都应该检测到合作伙伴不再可用,并且 (a) 注销 worker(如果 broker 检测到 worker 已经离开),或者 (b) 稍后尝试重新连接(如果 worker 丢失了它的连接到经纪人)。工作人员在忙碌时不需要,因为无论如何它都不会在经纪人的空闲工作人员队列中等待新工作。
ZeroMQ 不提供任何机制来帮助您查明另一端的套接字是否处于活动状态。 因此,心跳模式的标准场景(我认为是最方便的)是带超时的心跳。
您需要客户端和服务器上的套接字,它们在不同的线程中工作。还有一个轮询器。
轮询器示例:
p = zmq.Poller()
p.register(socket, zmq.POLLIN)
Сlient 向服务器发送消息并超时轮询套接字。选择最适合您的超时值,并且会清楚地表明服务器不可用。
轮询示例:
msg = dict(p.poll(timeout))
if socket in msg and msg[socket] == zmq.POLLIN:
# we get heartbeat from server
else:
# timeout - server unavailable
服务器也一样。
我认为这会有所帮助。