我正在开发一个使用ZeroMQ(版本4.0.1(的产品。
服务器和客户端基于 ZeroMQROUTER
套接字进行通信。
要读取套接字事件,服务器和客户端还会创建套接字监视器套接字 (PAIR
(。服务器绑定和侦听三个端口。在这三个端口中,有一个端口处于非安全模式。其他两个端口正在使用md5
身份验证。
我面临的问题是,服务器和客户端都会自发收到其中一个安全端口套接字的套接字断开连接(请参阅下面的日志(。我已经多次检查服务器和客户端都具有彼此的 L3 可访问性。
我还应该检查什么? 是什么真正触发了此错误情况?
zmq_print_callback:ZmQ: int zmq::stream_engine_t::read(void*, size_t):923
Stream engine recv():
TCP socket (187) to unknown:0 was disconnected
with error 107 [Transport endpoint is not connected]
以下事件序列可能会在服务器上触发此错误
- 服务器接收客户端 Y 的已接受事件并获取 FD1。
- 发生链路抖动/网络问题,客户端 Y 断开连接,但服务器未收到此断开连接。
- 网络恢复,客户端 Y 连接回服务器。
- 服务器接收客户端 Y 的已接受事件并获取 FD2。但是,发送到此套接字的数据包不会从服务器传出。
- 大约 1 分钟后,客户端 Y 收到 FD1 的"传输终结点未连接错误"。
- 应用程序可以使用它来视为客户端断开连接。