如何解决客户端连接然后断开连接然后快速连续重新连接时,zeromq服务器具有1分钟的延迟
我正在使用zeromq-4.0.1源代码。在生产中,有1个服务器和多个客户端。这些交换机之间的连接是通过路由器插座进行的。由于链接摆动,客户端将与服务器断开连接,并且恢复后客户端将重新连接。但是,在连接期间,客户端会获得新的fd。服务器端代码永远不会直接收到ZMQ_EVENT_DISCONNECTED(可能是由于链接摆动引起的网络问题,客户端的FIN无法到达服务器)。相反,服务器会为客户端接收ZMQ_EVENT_ACCEPTED事件,但具有不同的fd。这是延迟开始的地方。因此,此时,同一客户端有两个fds。新的fd无法运行。一段时间后,客户端收到以下有关旧fd的消息。
“ ZmQ:int zmq :: stream_engine_t :: read(void *,size_t):923流引擎recv():未知端口的TCP套接字(187)断开,错误107 [传输端点未连接]”
事件顺序
- 服务器收到clientY的ACCEPTED事件并获取FD1。
- 发生链接翻转/网络问题,clientY断开连接,但服务器未收到此断开连接。
- 网络恢复并且clientY连接回服务器。
- 服务器收到clientY的ACCEPTED事件并获取FD2
- 但是,发送到此套接字的数据包不会从服务器中传出。
- 大约1分钟后,clientY收到FD1的“传输端点未连接错误”。
- 此后,FD2变为活动状态。
如您所见,只有在第6步之后,新的fd才能运行。有时,此断开事件需要超过1分钟才能到达导致延迟的应用程序代码。在zeromq中是已知问题吗?有没有办法处理这种情况?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。