我正在运行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)
如何删除套接字断开连接事件上的陈旧连接?
答案 0 :(得分:1)
我找到了解决方案!根据这个问题,SocketIO中存在一个错误,该错误已在1.4.x版本中修复:
https://github.com/socketio/socket.io/issues/2118
我已升级到v1.4.5,并且在SocketIO连接关闭后,TCP连接现已正确关闭。