как обнаружить, что соединение пользователя потеряно или он закрыл окно браузера в сокете Nodejs.io

У меня есть приложение чата на узле.js и сокет.io, пользователь может подключаться и отключаться с помощью кнопки... У меня есть список онлайн-пользователей, который отлично управляется с помощью моих определенных событий, которые запускают пользователи.

но проблема в том, что я не могу определить, потерял ли пользователь соединение или закрыл окно браузера, не отключив себя вручную(кнопкой отключения)...

этот сокет.событие io запускается только при отключении пользователя сам он, когда потерял связь.

socket.on('disconnect',function(){
   console.log('user disconnected');  });

Я хочу, чтобы какой-то действительно хороший механизм следил за пользователями, чтобы обновить список пользователей в Интернете.

1 ответов


и в чем разница? Закрываем окно, перерезаем провод ethernet... для сервера это одно и то же: конец соединения.

чтение сокета.io docs:https://github.com/LearnBoost/socket.io/wiki/Exposed-events

гнездо.on ('disconnect', function () {})-событие disconnect запускается во всех случаях, когда соединение клиент-сервер закрыто. Он стреляет на желанный, нежеланный, мобильный, unmobile, клиент и сервер разъединяет.

вы не должны полагаться на свою кнопку, так как люди могут отключить не используя эту кнопку. Используйте событие disconnect и как только сокет отключается (сокет, а не Пользователь, потому что узел просто знает о сокетах), вам нужно будет узнать, кто был "владельцем" этого сокета и пометить его как "отключенный". Или даже лучше, подождите несколько секунд, а затем отметьте его как офлайн. Почему? Поскольку событие disconnect инициирует, даже если пользователь просто перезагружает страницу, или переходит к другому. Поэтому, если вы подождете несколько секунд, пользователь снова будет в сети.

У меня тоже была эта проблема, и я закончил созданием "наблюдателя", который работает каждые X секунд и помечает пользователей как автономных, когда у них нет сокета или когда они кажутся отсутствующими (без активности в течение длительного времени).