Как реализовать список посетителей обновляющийся на "лету"?

Есть несколько возможных вариантов реализации.

Можно получить из комет сервера список авторизованных пользователей подписанных на какой-то из каналов.

  1. Пользователь проходит авторизацию на комет сервере
  2. Подписывается на канал вида track_* (можно использовать любое название канала, например track_online или как угодно)
  3. Вы запросом к CometQL api получаете список авторизованных пользователей подписанных на канал (это уже список кто сейчас онлайн)
  1. Чтобы список пополнялся новыми пользователями в режиме реального времени, то надо в js добавить обработчики на события subscription и unsubscription приходящие из канала track_online (или того на какой вы подписались)

Получение списка пользователей онлайн

Запросом к CometQL api получаете список авторизованных пользователей подписанных на канал

mysql> SELECT * FROM users_in_pipes WHERE name = "track_online";

Подписка на обновление списка пользователей онлайн

CometServer().subscription("track_online.subscription", function(msg)
{
    // Обработка события что кто то зашёл на сайт и подписался на канал track_online
});	
CometServer().subscription("track_online.unsubscription", function(msg)
{
    // Обработка события что кто то покинул сайт и/или отписался от канала track_online
});	

Пример:

Пример отключения от комет сервера при потере фокуса окном. И подключении к комет серверу при получении фокуса. События подключения и отключения генерируют события в канале track_online у всех кто на этот канал подписан.

Обсуждение

Алексей, 2016/10/13 06:49

Добрый день, а как обновить список если пользователь ушел с сервера или отключился от канала?

Trapenok Victor, 2016/11/20 04:58

Добрый день. Как только кто то отпишется от канала то все остальные подписчики получат событие unsubscription. Тоесть сработает код:

CometServer().subscription("track_online.unsubscription", function(msg)
{
    // Обработка события что кто то покинул сайт и/или отписался от канала track_online
});	
Иван, 2018/05/10 19:55

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

Павел, localhost, 2018/04/19 20:51

Здравствуйте. Очень интересный принцип работы скрипта, особенно удивляет скорость его работы. А возможно ли как-нибудь «прикрутить» уведомление-строку, что в данный момент например пользователь печатает сообщение, или ответ? То есть, это уведомление видит только собеседник, и так в каждом случае. Намекните, пожалуйста, как осуществить, но и за полный ответ буду благодарен)

Trapenok Victor, 2018/08/07 09:04

Добрый день. Что то не сразу ваш комментарий заметил. Есть возможность использовать каналы вида web_* для отправки сообщения из js api другому пользователю сразу через комет сервер.

Valentin, Kiev, 2018/08/07 08:44

Доброго дня! Проблема з тим що дані евенти чомусь не спрацьовують! Скажуть в чому може бути проблема?

Trapenok Victor, 2018/08/07 09:02

Добрый день. Вот добавил онлайн демо https://codepen.io/Levhav/pen/zLJarm возможно это поможет.

Александр, 2019/01/21 15:36

И все-таки не понятно. Как реализовать обновляемый Online: N users без перезагрузки страницы?

Ваш комментарий. Вики-синтаксис разрешён:
K B A K​ V