Синхронизировать данные между внешним и внутренним

Мы разрабатываем браузерную социальную игру, и это игра MMORPG. Мы используем html/javascript/css в качестве внешнего интерфейса (по сравнению с flash). когда пользователь загружает нашу игру в первый раз, будет загружена куча файлов (внешние js/css) и будет запрошено несколько вызовов ajax. Вся страница не будет загружена снова, если пользователь не обновит страницу вручную. И мы создаем объект js для хранения пользовательских данных, таких как наличные деньги, уровень и многое другое. И это может быть изменено во время предстоящих операций пользователя. поэтому нам нужно синхронизировать данные из бэкэнда. Особая проблема в том, что данные пользователя также могут пассивно обновляться (другими пользователями), это может произойти в битве других пользователей. так что мой вопрос, как и когда синхронизировать?

До сих пор мы проходили два этапа: 1) всякий раз, когда пользователь нажимает на вкладки (чтобы показать / скрыть div в html) или возможные операции (например, бороться / купить какую-то вещь), затем мы вызываем ajax-запрос, чтобы каждый раз получать свежие данные из базы данных., 2) аналогично 1), но мы просто добавляем прокси, чтобы указать, изменились ли данные пользователя или нет, чтобы уменьшить бесполезный запрос к базе данных. Сначала вызов ajax переходит к прокси.

для 1) у нас может быть 70%+ бесполезных вызовов ajax и запросов базы данных

за 2) у нас может быть 70%+ бесполезных вызовов ajax

Теперь мы используем 2) подход. Но я не думаю, что это лучшее решение, так как у нас все еще 70% бесполезных вызовов ajax. так есть ли лучшее решение для этого варианта использования?


объяснения

Бесполезный AJAX-вызов: поскольку интервал между 2-мя AJAX-вызовами, пользовательские данные могут вообще не меняться.

2 ответа

Хороший вопрос, я думаю, что лучшим решением будет реализация push сервера. Идея проста, поскольку у вас есть связь между клиентом и сервером, сервер знает, когда данные изменяются, поэтому он может информировать клиента (в вашем случае html/javascript/css) о любых изменениях. Это должно исключить бесполезный опрос (ваши вызовы ajax).

Теперь вы можете проверить это или просто найти в Google другие решения Ajax Push: http://www.icefaces.org/main/ajax-java/ajaxpush.iface

Это также будет зависеть от технологии, которую вы используете для сервера приложений, в худшем случае вам придется реализовать свой собственный Ajax Push.

Я согласен с Келом здесь, Ajax-Push AKA Comet - лучшее решение.
Я уже знаю по своему опыту, что Persevere - это хорошее решение, и оно лучше всего работает с инструментарием Dojo.
Я также могу предложить вам попробовать Wt, если производительность критична, так как она позволяет кодировать сайты на C++. Оба они являются отличным выбором в зависимости от ваших потребностей.

Другие вопросы по тегам