2015-08-07 2 views
0

У меня есть сервер/клиент socket.io. Когда client безопасно отсоединяется, на стороне сервера, линииSocket.IO: обнаружение разъединенных разъемов

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

}); 

называется.

Однако, если клиентский сервер выходит из строя, то socket.on('disconnect') никогда не вызывается; Я знаю это, потому что я рекурсивно распечатываю wss.sockets.connected.length, и число не уменьшается.

Как я могу проверить, что такая авария произошла на сервере?

ответ

1

Вы должны в конечном итоге получить событие разъединения, потому что socket.io имеет механизм биения. Я не думаю, что есть другой способ обнаружить крах клиента. Это займет некоторое время.

Heartbeat было объяснено здесь хорошо:

Advantage/disadvantage of using socketio heartbeats

0

Когда сервер вызывает отсоединять(), мотивируя отключиться обработчик: IO сервера отключиться. И когда сервер останавливается, причина такова: транспорт закрывается. Таким образом, вы можете проверить это, добавив условие:

socket.on('disconnect', function(reason) { 
    if (reason === 'transport close'){ 
    console.log('Server Crashed'); 
    } 
}); 
Смежные вопросы