Это старая версия документа.
<rst>RU::12-Примеры::Как реализовать список посетителей обновляющийся на "лету"?</rst> <rst>Header: Как реализовать список посетителей обновляющийся на лету</rst> ====== Как реализовать список посетителей обновляющийся на "лету"? ====== Есть несколько возможных вариантов реализации. Можно получить из комет сервера список авторизованных пользователей подписанных на какой-то из каналов. - Пользователь проходит [[comet:authentication|авторизацию на комет сервере]] - [[comet:javascript_api#подписка_на_получение_сообщений_из_канала|Подписывается на канал]] вида track_* (можно использовать любое название канала, например track_online или как угодно) - Вы запросом к CometQL api получаете [[comet:cometql#таблица_users_in_pipes|список авторизованных пользователей подписанных на канал]] (это уже список кто сейчас онлайн) - Чтобы список пополнялся новыми пользователями в режиме реального времени, то надо в js добавить обработчики на события subscription и unsubscription приходящие из канала track_online (или того на какой вы подписались) ===== Получение списка пользователей онлайн ===== Запросом к CometQL api получаете [[comet:cometql#таблица_users_in_pipes|список авторизованных пользователей подписанных на канал]] <code> mysql> SELECT * FROM users_in_pipes WHERE name = "track_online"; </code> ===== Подписка на обновление списка пользователей онлайн ===== <code JavaScript> CometServer().subscription("track_online.subscription", function(msg) { // Обработка события что кто то зашёл на сайт и подписался на канал track_online }); CometServer().subscription("track_online.unsubscription", function(msg) { // Обработка события что кто то покинул сайт и/или отписался от канала track_online }); </code> Пример: <html> <iframe height='600' scrolling='no' title='CppComet auth chat example' src='//codepen.io/Levhav/embed/zLJarm/?height=265&theme-id=0&default-tab=js,result&embed-version=2' frameborder='no' allowtransparency='true' allowfullscreen='true' style='width: 100%;'>See the Pen <a href='https://codepen.io/Levhav/pen/zLJarm/'>CppComet auth chat example</a> by Trapenok Victor (<a href='https://codepen.io/Levhav'>@Levhav</a>) on <a href='https://codepen.io'>CodePen</a>. </iframe> </html> Пример отключения от комет сервера при потере фокуса окном. И подключении к комет серверу при получении фокуса. События подключения и отключения генерируют события в канале track_online у всех кто на этот канал подписан. <html> <iframe height='600' scrolling='no' title='QBZqYQ' src='//codepen.io/Levhav/embed/QBZqYQ/?height=265&theme-id=0&default-tab=js,result&embed-version=2' frameborder='no' allowtransparency='true' allowfullscreen='true' style='width: 100%;'>See the Pen <a href='https://codepen.io/Levhav/pen/QBZqYQ/'>QBZqYQ</a> by Trapenok Victor (<a href='https://codepen.io/Levhav'>@Levhav</a>) on <a href='https://codepen.io'>CodePen</a>. </iframe> </html>
Обсуждение
Добрый день, а как обновить список если пользователь ушел с сервера или отключился от канала?
Добрый день. Как только кто то отпишется от канала то все остальные подписчики получат событие unsubscription. Тоесть сработает код:
Доброго времени суток. У меня такой вопрос, как мне на сервер (php) получить данные о том, что пользователь покинул сайт, если он был единственным на сайте? В таком случае некому будет отправить данные.
Здравствуйте. Очень интересный принцип работы скрипта, особенно удивляет скорость его работы. А возможно ли как-нибудь «прикрутить» уведомление-строку, что в данный момент например пользователь печатает сообщение, или ответ? То есть, это уведомление видит только собеседник, и так в каждом случае. Намекните, пожалуйста, как осуществить, но и за полный ответ буду благодарен)
Добрый день. Что то не сразу ваш комментарий заметил. Есть возможность использовать каналы вида web_* для отправки сообщения из js api другому пользователю сразу через комет сервер.
Доброго дня! Проблема з тим що дані евенти чомусь не спрацьовують! Скажуть в чому може бути проблема?
Добрый день. Вот добавил онлайн демо https://codepen.io/Levhav/pen/zLJarm возможно это поможет.
И все-таки не понятно. Как реализовать обновляемый Online: N users без перезагрузки страницы?