рельсы: как обнаружить других клиентов, просматривающих тот же URL - PullRequest
0 голосов
/ 23 июня 2009

То, чего хочется достичь, это: Я хочу "синхронизировать веб-браузеры". У моего сайта есть «URL ожидания», при котором, когда браузер попадает туда, он будет ждать, пока другой браузер также не перейдет туда, и тогда оба будут представлены в виде викторины.

Прямо сейчас URL-адрес ожидания будет каждую секунду вызывать Rails, чтобы проверить, пришел ли другой игрок в игру. Как в Rails Framework можно обнаружить другой клиент, подключающийся к тому же URL?

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

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

Ответы [ 3 ]

4 голосов
/ 23 июня 2009

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

Самый простой: я бы создал объект ActiveRecord, возможно, называемый Quiz, экземпляры которого люди присоединяются посредством перехода по URL, например, используя маршруты по умолчанию:

http://yoursite.com/quizes/join/3434

Вам потребуется ajax poller, чтобы уведомить других; используйте для этого periodically_call_remote - вы можете использовать render: nothing => true по умолчанию и визуализировать что-то еще, если произошла ошибка, чтобы сохранить ее работоспособность. Вы также можете использовать частотный метод в качестве основы, чтобы определить, выходят ли люди из викторины (например, если частота равна 1 с, то предположите, что кто-то ушел, если они не пингуются через 5-10 с).

1 голос
/ 23 июня 2009

Предполагая, что эти пользователи не зарегистрированы на сайте, поэтому не имеют какого-либо идентификатора пользователя, который вы могли бы сохранить, я бы посоветовал использовать сеанс. Это хранилище данных для каждого пользователя. По умолчанию сеанс хранится в зашифрованном файле cookie на компьютере пользователя. Однако вы можете использовать ActiveRecord в качестве хранилища сеансов и, возможно, можете запросить эту таблицу напрямую?

Сохраните URL-адрес в сеансе и выполните его поиск позднее. Обычно вы можете получить доступ к текущему сеансу пользователей только с помощью хеша Rails для сеанса, но, возможно, (не проверено), если вы создали модель с именем Session (или, может быть, что-то более конкретное, например, «WaitingGamers»), в которой использовалась таблица сеансов, вы можете найти информацию, необходимо.

Я бы предположил, что при использовании ActiveRecord в качестве хранилища сеанса данные сеанса сохраняются в виде сериализованного хэша. Используйте Marshall, чтобы вернуть его в обычный хеш и найти там данные, которые вы сохранили.

0 голосов
/ 23 июня 2009

Я не эксперт по рельсам, но так как все состояние находится в вашей базе данных, в которой будет храниться эта информация.

Можно сохранить таблицу «ожидающих пользователей» и в представлении «ждать URL» проверить, находится ли пользователь уже в таблице. Если нет, добавьте его в таблицу. Затем проверьте, ожидает ли другой пользователь (может быть, больше одного?), И если да, сопоставьте его и удалите из таблицы.

Еще одним улучшением было бы сохранение отметки времени для каждого пользователя в таблице «ожидающих пользователей», которая обновляется в представлении - это будет служить подтверждением активности, которое позволит вам обнаруживать пользователей, которые оставили «ждать URL» »или закрыли браузер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...