假设我想使用ZeroMQ(pyzmq
)和asyncio
(对于事件循环,协同程序等)实现echo服务器和客户端。
现在我希望通过添加心跳来增加可靠性。由于我不想与我的精彩回声协议进行太多交互,因此这个心跳是由客户端和服务器在一对专用套接字上完成的。
据我所知,的方式™是在服务器类中创建一个新的zmq套接字,将其注册到现有的Poller
并让服务器类处理所有内容,从超时计算到发送节拍。当然,这很有效。
但这比它应该更复杂(这是个人观点)。从服务器的角度来看,'heartbeats'是实现细节。什么样的心跳是回答一个简单的问题:“客户还在吗?”。从技术上讲,我想设置一个带有超时和地址的Heartbeat
对象。 Heartbeat
对象将执行所有套接字设置,与节拍相关的套接字轮询,发送实际节拍并接收它们。
从服务器的角度来看,我会在需要时使用client.is_alive()
。但这需要两个套接字轮询器并行工作。我可以通过遗嘱执行人来实现这一目标,但这似乎并不正确。你会怎么做?