How to live update browser game attributes like the 4 resources in Travian game?
Я хотел бы сделать сетевую игру, похожую на Травиан (или Икариам). Игра будет на PHP и MySQL. Интересно, как я могу добиться живого обновления игровых атрибутов.
Что касается внешнего интерфейса, я могу добиться с помощью AJAX-вызовов (получить последние значения из базы данных) или даже фальшивое обновление значений (не сообщается с сервером).
Для бэкэнда это выполняется заданием PHP cron (которое запускается каждые несколько секунд)? Если да, может ли кто-нибудь предоставить мне примеры кодов?
Между прочим, я знаю, что это будет проблемой, если я буду использовать IIS + FastCGI.
=== Информация о версии ===
PHP: 5.2.3
IIS: 6.0 с FastCGI
ОС: Windows Server 2003 Standard R2
4 ответа
Правильный ответ зависит от ваших точных потребностей.
Все ли всегда получают ресурсы с одинаковой скоростью? Если это так, простое решение состоит в том, чтобы отследить, как долго существует их пользователь, рассчитать количество ресурсов на основе скорости, которую они получают, и вычесть количество ресурсов, которые они потратили в общей сложности. Это будет немного проблемой, если скорость может когда-либо измениться, поэтому, если вы используете это решение, вы в значительной степени застряли на выбранной вами скорости, если вы не переписываете обработку полностью (например, на приведенную ниже),
Если меняется скорость, с которой люди могут получать ресурсы, вам необходимо периодически обновлять данные. Задача cronjob / запланированная будет хорошо работать, чтобы убедиться, что все обновлены, но в некоторых ситуациях может быть лучше просто измерить, сколько времени прошло с тех пор, как вы обновили ресурсы каждого пользователя, а затем обновлять их при каждой загрузке страницы, которую они делают. войдя в систему, умножив время, которое они провели, на скорость, с которой они получают ресурсы - таким образом, вы избегаете обновления, пока вам действительно не понадобится новое значение.
Для управления ресурсами типа Travian вам необходимо следить за тем, когда вы обновляли ресурсы пользователей в последний раз. Если вы читаете значения ресурсов (для обновления страницы или чего-то еще), вам необходимо добавить количество ресурсов, полученных со времени "последнего обновления" (в зависимости от количества полей ресурсов и бонусов, которые получает пользователь) и отправить это значение браузер. Вы также можете разрешить скрипту в браузере рассчитать эти суммы.
Возможно, вам стоит как-то рассмотреть кэширование всех объемов ресурсов, так как эти значения требуются много, улучшая связь с вашей базой данных.
Если пользователь заканчивает создание поля ресурса, использует рынок, строит структуру и т. Д., Вам необходимо обновить количество ресурсов (и "время последнего обновления"), потому что вы не можете просто отслеживать события такого рода.
Благодаря подсчету ресурсов уменьшается нагрузка на базу данных, поскольку вам не нужно записывать новые значения каждый раз, когда пользователь обновляет страницу браузера. Это также более точно, поскольку у вас меньше ошибок округления.
Чтобы поддерживать увеличение ресурсов между обновлениями страниц, вам нужен метод, описанный Фрэнком Фармером. Просто вставьте количество ресурсов и "частоту усиления" в некоторый javascript и увеличивайте количество ресурсов каждую "частоту усиления" на единицу.
Вы также можете рассчитывать ресурсы каждый раз, когда страница или javascript запрашивает. Вам нужно сохранить последнее обновленное время.
Это может быть старый пост, но он сразу же появляется в Google, так что вот еще один вариант, как это делает игра, которую я разрабатывал.
Я использую клиентский JavaScript, который использует флеш-сокет, чтобы получать живые обновления от выделенного игрового сервера, работающего на хосте.
Я использую комплект xmlsocket из http://devpro.it/xmlsocket/