zeromq - ZMQ 中的乒乓心跳

标签 zeromq pyzmq

我一直在阅读 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/

相关文章:

c++ - ZeroMQ C++ 多线程服务器示例运行时错误

python - 使用发送方法pyzmq错误不支持检索操作

python - 在 zmq 订阅者中自动重新连接

zeromq - 如果客户端断开连接,使用 ZeroMQ 向特定客户端和队列发送回复

python - 模拟与外部设备通信的Pythonic方式是什么? RPyC?

go - 如何使用 protobuf 二进制文件在 PUB/SUB ( ZeroMQ ) 中进行过滤?

c - 使用 CZMQ-4.1.0 新 zsock API 更新的异步 Majordomo 模式示例不起作用

zeromq - 并行发送多个多部分 ZMQ PUB 消息

python - Python 中的 ZMQ - PULL 端进程能否知道 PUSH 端进程是否已关闭?

python - 如何使用 pyzmq 发送带有 PUB/SUB 模式的字典?