Ajax Push Engine (Comet) и постоянный чат - как реализовать?
Мы разрабатываем онлайн-браузерную игру в реальном времени и решили использовать сервер APE. У нас есть система внутриигрового чата из нашего предыдущего проекта, и мы хотели бы перенести ее на APE. Поскольку мы немного новички в APE, мы не уверены, какой сценарий будет работать лучше или, возможно, не будет работать вообще.
Теперь чат работает следующим образом: - в чате есть 4 комнаты, где пользователи говорят о каком-то определенном игровом аспекте (торговля, бой и т. Д.), Когда пользователь полностью перезагружает страницу, он / она получает последние 30 сообщений из базы данных (база данных) для открытая комната чата - чат периодически отправляет запросы AJAX, чтобы узнать, есть ли новые сообщения в какой-либо комнате чата, но актуальные последние сообщения загружаются только для той комнаты чата, которая в данный момент открыта. Чтобы сделать вещи еще более сложными, мы разделили чат на отдельные языки - пользователи получают сообщения только на том языке, который указан в их настройках cookie. Они могут изменить его в любое время, а затем они будут получать сообщения на другом языке.
Теперь, когда мы переходим к полностью основанной на AJAX системе без перезагрузки страницы, мы будем автоматически минимизировать запросы на получение последних 30 сообщений из базы данных.
Но самое сложное - как организовать хранение сообщений в БД и отправку пользователям через APE?
Мы рассмотрели следующие варианты: - пользователь отправляет сообщение в сценарий PHP, он переходит к базе данных db, затем PHP отправляет сообщение в APE через inlinepush (согласно документам inlinepush поддерживает только один канал, мы не уверены, как он будет работать). затем), а затем APE отправляет сообщение всем пользователям (кажется, нам нужно сохранить на сервере APE также предпочитаемый пользователем язык, чтобы сообщение отправлялось только соответствующим пользователям); - пользователь отправляет сообщение на сервер APE, а сервер APE доставляет его другим пользователям на том же языке, а также вызывает скрипт PHP для сохранения сообщения в базе данных; - пользователь отправляет сообщение на сервер APE, а сервер APE доставляет его другим пользователям на том же языке и сохраняет сообщение в базе данных, используя собственные возможности APE для Mysql.
С одной стороны, мы предпочитаем хранить данные через PHP, потому что у нас есть довольно надежная библиотека доступа к БД, и мы хотели бы избежать ее переноса на APE и Javascript только для хранения сообщений чата (а также у нас нет опыта работы с JS на стороне сервера).). Но если это даст некоторые хорошие преимущества, то, конечно, мы будем использовать собственный Mysql от APE.
Также нас беспокоит, сможет ли APE отфильтровать всех пользователей по их языку и отправить сообщение только соответствующим пользователям? Как APE имеет дело с куки?
Кроме того, каналы на основе поддоменов в APE, кажется, немного неудобны в настройке, но мы пока не нашли лучшей альтернативы.
2 ответа
В итоге мы использовали node.js и Faye с пользовательской аутентификацией, и она работала просто отлично. Faye довольно легкий и настраиваемый, без проблем со сложной настройкой домена. Также было относительно легко кодировать наш собственный SQL-бэкэнд через PHP.
Проверьте эту ссылку:
Похоже, это проект с открытым исходным кодом, который реализует концепцию AJAX PUSH ENGINE.
Они предоставили вам код (на стороне сервера и на стороне клиента). Хотя кажется, что Windows не поддерживает то, что я на самом деле изучаю, но это может помочь вам, если вам это нужно.
Хотя ответ кажется бесполезным для реального человека, который разместил вопрос, потому что это долго.