网络故障时自动重新连接

Automatic reconnect in case of network failures

我正在测试 ZeroMQ 的 .NET 版本以了解如何处理网络故障。我将服务器(pub 套接字)放到一台外部机器上并调试客户端(子套接字)。如果我停止我的本地 Wi-Fi 连接几秒钟,然后 ZeroMQ 会自动恢复,我什至会得到剩余的值。但是,如果我将 Wi-Fi 禁用一分钟之类的较长时间,它就会卡在帧等待中。当 ZeroMQ 仍然能够恢复时,我该如何配置这个时间段?我怎样才能在几分钟后手动重新连接?我如何理解套接字已锁定,我需要再次kill/open?

Q :
" How can I configure this ... ?"

A :
使用 .NET 版本的 zmq_setsockopt() 详细参数设置 - link-management 参数系列相似 ZMQ_RECONNECT_IVL, ZMQ_RCVTIMEO 等。

所有其他问题取决于您的代码。

如果使用 .recv() 方法中的 blocking-forms,您很容易陷入无法挽救的死锁,最好永远不要阻塞自己的代码(为什么有人会故意丢失自己的代码 domain-of-control).

如果确实需要了解 low-level 内部 link-management 详细信息,请毫不犹豫地使用 zmq_socket_monitor() 工具(如果 .NET 绑定中不可用,仍然可以使用其他语言查看有关 link-state 和相关事件的 monitor-instance 报告的详细信息。

我在他们的 GitHub https://github.com/zeromq/netmq/issues/845 上找到了答案。似乎该行为是设计使然,因为我通过 .NET 绑定获得了与本机 zmq 库相同的结果。