Как отслеживать выход из сети?

Пишу чат на js, php, mysql. Нужно сделать статусы в сети пользователь или нет. В БД добавил три поля: isOnline, lastOnline и browserWindowsCount.
browserWindowsCount хочу использовать потому что чат может открываться в нескольких окнах. И вот к количеству окон я добавляю 1 и ставлю isOnline на true, когда в целом пользователь заходит в чат. А вот как отследить выход из чата? Ну то есть закрытие окна. Это же как-то сделано в телеграме и WhatsApp и тоже можно открывать несколько окон, но при этом найти как это сделано я не могу
  • Вопрос задан
  • 808 просмотров
Решения вопроса 2
Daemon23RUS
@Daemon23RUS
Is online В БД явно лишний
Browser count никакой тоже полезности не несет.
Перечисленные примеры используют другую технологию Socket.IO например.
Кстати очень хорошо подходит для чатов.
Ознакомитесь с технологией https://socket.io/ многие вопросы отпадут сами собой.

P.S. чтобы нахрапом понять онлайн пользователь или нет, отправляете запрос раз ну например в 10 секунд от клиента, пришел запрос - обновился last Online А дальше все просто, онлайн те у кого это значение от текущего отличается менее чем на 20 секунд.
Ответ написан
@alexalexes
Чтобы реализовать вашу идею, нужен стек, где сервер выступает в роли ведущего по части отправки http-запроса клиенту. Сервер PHP, обычно, выступает в роли ведомого - когда клиент соизволит сделать запрос, тогда сервер может проанализировать, жив ли клиент. В случае с WebSocket можно на стороне сервера понять, закрылось ли соединение, не дожидаясь внятного ответа от клиента.
Сервер PHP может в WebSocket, но реализации у него кривые. На эту роль идеально подходят NodeJS + WebSocket.
С PHP вы только можете отслеживать, когда последний раз клиент отправлял запрос - если больше условных 10 минут назад, то он скорее мертв, чем жив.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы