Отслеживайте онлайн-пользователей в режиме реального времени, чтобы сыграть в викторину для двух игроков

Я хочу создать викторину для двух игроков в реальном времени. Для этого мне нужно отслеживать, когда пользователи находятся на странице моей викторины, а когда покидают ее. По сути, мне нужно какое-то лобби, где собираются игроки и откуда мой сценарий выбирает двух случайных игроков, которые должны столкнуться друг с другом в игре.

Поскольку многие игроки переключаются из онлайн-режима в офлайн за очень короткое время, я предпочитаю не использовать классический метод «обновление статуса игрока в базе данных, а затем получение через определенный интервал списка онлайн-игроков». В настоящее время я раздумываю над идеей использования Comet Push и немного изучил PubNub.

Я считаю, что настоящую викторину решить довольно просто: использовать классическую Comet publish () для отправки ответов и subscribe () для проверки статуса другого пользователя. Но меня беспокоит, как мне получить этот конкретный список среди онлайн-пользователей?

Я попытался опубликовать () user_id, когда пользователь переходит в лобби, но как мне уведомить всех других пользователей, когда этот пользователь переходит в автономный режим? Как мне отобразить в лобби общее количество подключенных пользователей вместе с их именами?

Я впервые сталкиваюсь с Кометой, и ее логика мне не совсем понятна.

Спасибо за помощь!


person linkyndy    schedule 05.07.2011    source источник


Ответы (1)


Вы можете попробовать Pusher и наш (я работаю в Pusher) функция присутствия. Каналы присутствия позволяют легко реализовать функциональность в стиле комнаты / вестибюля и должны соответствовать вашим критериям.

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

Таким образом, вам не нужно реализовывать эту функцию самостоятельно. Это часть решения, которое предоставляет Pusher.

person leggetter    schedule 05.07.2011
comment
Спасибо за ваше предложение, но я лучше разработаю решение самостоятельно или воспользуюсь бесплатным решением, так как не хочу тратить деньги на этот функционал (это личный проект). - person linkyndy; 05.07.2011
comment
@linkyndy - на следующей странице я перечислил целый ряд технологий реального времени, включая раздел самообслуживания, так что, надеюсь, он вам пригодится: leggetter.co.uk/real-time-technologies-guide Если присутствие важно, как это кажется, вы можете хочу рассмотреть и XMPP решение. К сожалению, я еще не определил, какое из решений поддерживает XMPP на этой странице. - person leggetter; 06.07.2011
comment
Спасибо за помощь. Я, вероятно, остановлюсь на PubNub прямо сейчас, так как я уже провел некоторые исследования о том, как его использовать. WebSockets выглядят довольно круто, и я определенно буду использовать их так быстро, как они будут широко поддерживаться. - person linkyndy; 06.07.2011