Socket.io通过websockets – 随机的“传输结束”断开连接

运用

Web应用程序。 NodeJS + Socket.io(仅限websocket,心跳启用)。

问题

我的应用程序工作正常(它连接到Socket.io,它发出/正确接收消息),但我检测到随机断开,而不是因为心跳超时。 即使服务器收到来自客户端的心跳包,仍然有可能在几秒钟内断开该客户端。 我不明白原因。 它几乎是随机发生的, 大约每3-15分钟一次 。 更改socket.ioconfiguration似乎不影响频率。

这里是日志,它清楚地表明,断开连接的原因不是心跳超时 ,而是一个传输结束(套接字结束)

日志:

debug: emitting heartbeat for client cTVCsv2GS2R_lh3Ecao- debug: websocket writing 2:: debug: set heartbeat timeout for client cTVCsv2GS2R_lh3Ecao- debug: got heartbeat packet debug: cleared heartbeat timeout for client cTVCsv2GS2R_lh3Ecao- debug: set heartbeat interval for client cTVCsv2GS2R_lh3Ecao- info: transport end (socket end) // ^ Why? debug: set close timeout for client cTVCsv2GS2R_lh3Ecao- debug: cleared close timeout for client cTVCsv2GS2R_lh3Ecao- debug: cleared heartbeat interval for client cTVCsv2GS2R_lh3Ecao- SOCK 25.12 22:23:20.675 disconnection from IO detected (USER1) // ^ This means disconnected event fired debug: discarding transport debug: client authorized info: handshake authorized GPBLHsqhhrdsTeqTcao_ debug: setting request GET /socket.io/1/websocket/GPBLHsqhhrdsTeqTcao_?conftoken=20519986772 debug: set heartbeat interval for client GPBLHsqhhrdsTeqTcao_ debug: client authorized for debug: websocket writing 1:: debug: client authorized for /io/activity debug: websocket writing 1::/io/activity SOCK 25.12 22:23:23.005 reconnected to IO (USER1) 

组态

客户:

 socket = io.connect('/io/activity',{'max reconnection attempts':Infinity}) 

服务器:

 io = require('socket.io').listen(server, { log: true , "close timeout": 120 , "heartbeat timeout": 120 , "heartbeat interval": 30 , "transports": ["websocket"] }) io.enable('browser client minification') io.enable('browser client etag') io.enable('browser client gzip') 

如果我使用我不知道它的内部工作的I包,我通常会防守。

一旦我在几年前发生随机错误,我只是听错误事件,并重新启动连接。 注意一些客户端的数据可能会丢失,所以处理错误很小。

看看socket.io错误会有帮助。 祝你好运