如何在 ZMQ 中删除不活动/断开连接的对等点

Car*_*son 6 disconnect zeromq peer

我有一个客户端/服务器设置,其中客户端向服务器发送单个请求消息并返回一堆数据消息。服务器使用 ROUTER 套接字实现,客户端使用 DEALER 实现。通信是异步的。客户端通常是 iPad/iPhone,它们通过 wifi 连接,因此连接不是 100% 可靠。

我担心的问题是,如果客户端连接到服务器并发送数据请求,但在响应消息传回之前通信中断(例如,wifi 覆盖范围外)。

在这种情况下,消息将在服务器端排队等待客户端重新连接。这在短时间内很好,但最终我想删除消息和连接以释放资源。

通过检查活动/超时,可以在服务器和客户端应用程序中识别连接已消失。客户端可以关闭套接字并以这种方式释放资源,但是如何在服务器中完成呢?

Jas*_*son 1

根据ZMQ 常见问题解答

如何刷新 ZeroMQ 套接字队列中的所有消息?

没有明确的命令用于刷新消息队列中的特定消息或所有消息。您可以将 ZMQ_LINGER 设置为 0 并关闭套接字以丢弃任何未发送的消息。

根据2013 年的邮件列表讨论

没有选项可以[从传出消息队列]删除旧消息。

最好的选择是实现心跳,并且当一个客户端停止响应而没有显式断开连接时,重新启动 ROUTER 套接字。凌乱,我知道,这确实应该是 HWM 的一个配套选项。Pieter Hintjens 显然也参与其中(他创建了 ZMQ)——但那是 2011 年的事情,所以看起来似乎什么也没发生。