gpt4 book ai didi

zeromq - ZMQ 中的乒乓心跳

转载 作者:行者123 更新时间:2023-12-04 03:13:04 28 4
gpt4 key购买 nike

我一直在阅读 ZMQ documentation在心跳上并阅读应该使用乒乓方法而不是用于偏执海盗模式的方法

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.



然而,我发现几乎没有任何关于乒乓模式的文档(为什么它仍然是首选?)。唯一可能的代码示例是 ping.pypong.py在 pyzmq 示例中。

这些例子是否足以证明双向心跳?如果是这样,“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 和经纪人都应该检测到合作伙伴不再可用,并且 (a) 取消登记 worker (如果经纪人检测到 worker 已经离开),或者 (b) 稍后尝试重新连接(如果 worker 失去了它与代理的连接)。忙碌时不需要工作人员,因为无论如何它都不会在代理的空闲工作人员队列中等待新工作。

最佳答案

ZeroMQ 不提供任何机制来帮助您找出另一端的套接字是否处于事件状态。
因此,心跳模式的标准场景(我认为是最方便的)是带有超时的心跳。

您需要客户端和服务器上的套接字,它们在不同的线程中工作。还有一个投票者。

轮询器示例:

p = zmq.Poller()
p.register(socket, zmq.POLLIN)

客户端向服务器发送消息并超时轮询套接字。选择最适合您的超时值,会清楚地表明服务器不可用。

投票示例:
msg = dict(p.poll(timeout)) 
if socket in msg and msg[socket] == zmq.POLLIN:
# we get heartbeat from server
else:
# timeout - server unavailable

服务器也一样。

我认为这会有所帮助。

关于zeromq - ZMQ 中的乒乓心跳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43371580/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com