4

我有一个连接到 ROUTER 套接字的 DEALER 套接字,但是,ROUTER 套接字有时可能会取消绑定并重新绑定到同一个端口(由于应用程序关闭并重新启动绑定套接字)。

我如何确保经销商在此期间发送的任何和所有消息都将被丢弃/丢弃?当 ROUTER 套接字再次绑定时,就会收到大量来自 DEALER 的消息。我希望丢弃所有在 ROUTER 套接字未绑定时发送到 ROUTER 套接字的 DEALER 原始消息。有没有办法调整设置?请注意,ROUTER 套接字可能不会以受控方式关闭或处置,因为我也想处理完整的应用程序崩溃。

非常感谢任何指点...

4

1 回答 1

6

需要增强控制 DEALER 套接字的进程,以检测到 ROUTER 的连接已消失。然后您需要关闭 DEALER 套接字(将 LINGER 设置为 0,以便丢弃所有排队的消息),创建一个新套接字并再次连接。并定期重复,直到建立连接。

查看http://zguide.zeromq.org/page:all并阅读“Paranoid Pirate Pattern”。偏执的海盗工人也有同样的问题。它是一个连接到 ROUTER 的 DEALER 套接字,需要在 ROUTER 出现故障时重新连接。

此解决方案使用心跳来确定连接何时消失。该指南警告说,很难让心跳正确,因此在考虑替代方案时请记住这一点。

另一种方法:请注意,3.2 API 包含新的套接字监视器 API,它创建一个 PAIR 套接字,可用于监视现有套接字的状态。这可能允许您在不使用心跳的情况下检测到 DEALER 与 ROUTER 的连接已经消失 - 但我自己没有使用过这个 API。一旦检测到连接消失,关闭套接字,重新连接,重复上述操作。

于 2013-06-25T15:41:56.540 回答