2013-03-13 4 views
2

Следуя инструкции от моего previous question, теперь у меня есть массив подключенных пользователей в socket.io. Моя проблема (о чем я был предупрежден в ответе) заключается в том, что сокеты остаются в этом массиве даже после отключения браузера.Тест, если сокет все еще открыт

Я попытался удалить сокеты из массива в функции socket.on('disconnect', но между тем, когда браузер отключается, а socket.io вызывает задержку ~ 1 минута, отключается соединение.

Каков наилучший способ «проверить» сокет, чтобы узнать, действительно ли он жив? У меня возникает соблазн попытаться отправить сообщение и поймать какие-либо ошибки, но я чувствую, что есть более элегантное решение.

+2

вы можете попробовать сокращение 'близко timeout' см http://stackoverflow.com/questions/7192747/socket-io-delay-in-firing-the-disconnect-event, по умолчанию составляет 60 с. –

ответ

0

У меня была ошибка в моем обработчике разъединения. То, что я в конечном итоге не используя:

socket.on('disconnect', function() { 
    users.splice(users.indexOf(socket), 1); 
}); 
0
socket.on('end',function(){ 
//your code 
}) 

или

socket.on('error',function(err){ 
//in case of any errors 
}) 

Разъединение событие обыкновение огонь, пока все клиенты были отключены!

0

Решение о том, как проверить, если "сокет остается открытым"

if(socket.readyState === socket.OPEN) 
{ 
} 

Почему это работает:

readyState = Текущее состояние соединения; это одно из состояний состояния готовности . Только чтение.

«Константы состояния готовности»
ПОДКЛЮЧЕНИЕ 0: Соединение еще не открыто.
ОТКРЫТ 1: соединение открыто и готово к общению.
ЗАКРЫТИЕ 2: Соединение находится в процессе закрытия.
ЗАКРЫТО 3: Соединение закрыто или не может быть открыто.

https://developer.mozilla.org/en-US/docs/Web/API/WebSocket

Смежные вопросы