Socket.IO:检测断开连接的套接字

Socket.IO: Detect disconnected sockets

我有一个socket.ioserver/client。当 client 安全断开连接时,在服务器端,行

socket.on('disconnect', function() {

});

被调用。

但是,如果客户端服务器崩溃,则永远不会调用 socket.on('disconnect');我知道这一点是因为我递归地打印出 wss.sockets.connected.length 并且数字没有减少。

如何检查服务器是否发生了此类崩溃?

您最终应该会收到断开连接事件,因为socket.io 有心跳机制。我认为没有其他方法可以检测客户端崩溃。不过确实需要一些时间。

Heartbeat 在这里解释得很好:

Advantage/disadvantage of using socketio heartbeats

当服务器调用disconnect()时,给断开处理程序的原因是:io server disconnect。当服务器停止时,原因是:传输关闭。 所以你可以通过添加条件来检查:

socket.on('disconnect', function(reason) {
  if (reason === 'transport close'){
    console.log('Server Crashed');
  } 
});