как обнаружить, что соединение пользователя потеряно или он закрыл окно браузера в сокете 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 секунд и помечает пользователей как автономных, когда у них нет сокета или когда они кажутся отсутствующими (без активности в течение длительного времени).