Ajax Push Engine (Comet) и постоянный чат - как реализовать? - PullRequest
2 голосов
/ 30 октября 2010

Мы разрабатываем онлайн-браузерную игру в режиме реального времени, и мы решили использовать сервер APE.У нас есть внутриигровая система чата из нашего предыдущего проекта, и мы хотели бы перенести ее на APE.Поскольку мы немного новичок в APE, мы не уверены, какой сценарий будет работать лучше или, возможно, не будет работать вообще.

Теперь чат работает следующим образом: - в чате есть 4 комнаты, где пользователи говорят онекоторый определенный игровой аспект (торговля, бой и т. д.), когда пользователь полностью перезагружает страницу, он / она получает последние 30 сообщений из базы данных (db) для открытой комнаты чата - чат периодически выдает запросы AJAX, чтобы увидеть, есть ли новыесообщения в любой из комнат чата, но актуальные последние сообщения загружаются только для той комнаты чата, которая в данный момент открыта.Чтобы сделать вещи еще более сложными, мы разделили чат на отдельные языки - пользователи получают сообщения только на том языке, который указан в их настройках cookie.Они могут изменить его в любое время, и тогда они получат сообщения на другом языке.

Теперь, когда мы переходим к полностью основанной на AJAX системе без перезагрузки страницы вообще, мы будем автоматически минимизировать запросы, чтобы получитьпоследние 30 сообщений из db.

Но самое сложное - как организовать хранение сообщений в db и отправку пользователям через APE?

Мы рассмотрели следующие варианты: - пользователь отправляетсообщение в сценарий PHP, оно переходит к базе данных, затем PHP отправляет сообщение в APE через inlinepush (согласно документам inlinepush поддерживает только один канал, мы не уверены, как он будет работать тогда), а затем APE отправляет сообщениевсе пользователи (кажется, нам нужно хранить на сервере APE также предпочитаемый пользователем язык, поэтому сообщение отправляется только соответствующим пользователям);- пользователь отправляет сообщение на сервер APE, а сервер APE доставляет его другим пользователям на том же языке, а также вызывает скрипт PHP для сохранения сообщения в базе данных;- пользователь отправляет сообщение на сервер APE, а сервер APE доставляет его другим пользователям на том же языке и сохраняет сообщение в базе данных, используя собственные возможности APE для Mysql.

С одной стороны, мы предпочитаем хранить данныечерез PHP, потому что у нас довольно надежная библиотека доступа к БД, и мы хотели бы избежать ее портирования на APE и Javascript только для хранения сообщений чата (а также у нас нет опыта работы с JS на стороне сервера).Но если это даст некоторые хорошие преимущества, то, конечно, мы будем использовать собственный Mysql от APE.

Также мы обеспокоены, сможет ли APE отфильтровать всех пользователей по их языку и отправить сообщение только соответствующим пользователям?Как APE справляется с файлами cookie?

Кроме того, каналы на основе поддоменов в APE кажутся немного неудобными в настройке, но лучшей альтернативы мы пока не нашли.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2012

В итоге мы использовали node.js и Faye с пользовательской аутентификацией, и она работала просто отлично.Faye довольно легкий и настраиваемый, без проблем со сложной настройкой домена.Также было относительно легко кодировать наш собственный SQL-интерфейс через PHP.

Фэй

0 голосов
/ 03 сентября 2012

Проверьте эту ссылку:

http://www.ape -project.org

Это проект с открытым исходным кодом, в котором реализована концепция AJAX PUSH ENGINE.

Они предоставили вам код (на стороне сервера и на стороне клиента).Хотя, похоже, у меня нет поддержки для Windows, что я на самом деле изучаю, но она может вам помочь, если вам это нужно.

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

...