当客户端由于网络错误而断开连接时,socket.io服务器不会终止tcp连接

时间:2016-01-14 06:07:55

标签: node.js socket.io

我正在运行nodejs服务器并使用socket.io 1.3.5来处理websocket连接。当服务器收到带有“ping timeout”或“transport close”的套接字断开事件时,它将断开套接字但不清除所有绑定。它打印下面的日志

socket.io:client client close with reason ping timeout
socket.io:socket closing socket - reason ping timeout
socket.io:client ignoring remove for WX-M8GL6SvkQtxXMAAAA

由于某些网络错误导致套接字断开时我注意到的奇怪之处是,从服务器到浏览器的tcp套接字绑定未被清除并且永远保持在ESTABLISHED状态。即使在ping超时12小时接收断开连接后,我也可以看到下面提到的连接。

node      29881 user   14u  IPv4 38563924      0t0  TCP 10.5.7.33:5100->10.5.6.50:49649 (ESTABLISHED)
node      29881 user   15u  IPv4 38563929      0t0  TCP 10.5.7.33:5100->10.5.6.50:49653 (ESTABLISHED)
node      29881 user   16u  IPv4 38563937      0t0  TCP 10.5.7.33:5100->10.5.6.60:49659 (ESTABLISHED)

如何删除套接字断开连接事件上的陈旧连接?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案!根据这个问题,SocketIO中存在一个错误,该错误已在1.4.x版本中修复:

https://github.com/socketio/socket.io/issues/2118

我已升级到v1.4.5,并且在SocketIO连接关闭后,TCP连接现已正确关闭。