Как вживую обновлять атрибуты браузерной игры, такие как 4 ресурса в игре Travian? - PullRequest
3 голосов
/ 17 января 2010

Я хотел бы сделать сетевую игру, похожую на Травиан (или Икариам). Игра будет на PHP и MySQL. Интересно, как я могу добиться живого обновления игровых атрибутов.

Для внешнего интерфейса я могу добиться с помощью вызовов AJAX (получить последние значения из базы данных) или даже путем фальшивого обновления значений (не сообщенных с сервером).

Для бэкэнда это выполняется заданием PHP cron (которое запускается каждые несколько секунд)? Если да, то может ли кто-нибудь предоставить мне примеры кодов?

кстати, я знаю, что будет проблематично, если я буду использовать IIS + FastCGI.

=== Информация о версии ===

PHP: 5.2.3

IIS: 6.0 с FastCGI

ОС: Windows Server 2003 Standard R2

Ответы [ 4 ]

6 голосов
/ 17 января 2010

Правильный ответ зависит от ваших точных потребностей.

Все ли всегда получают ресурсы с одинаковой скоростью? Если это так, простое решение состоит в том, чтобы отследить, как долго существует их пользователь, рассчитать количество ресурсов на основе скорости, которую они получают, и вычесть количество ресурсов, которые они потратили в общей сложности. Это будет немного проблемой, если скорость может когда-либо измениться, поэтому, если вы используете это решение, вы в значительной степени застряли на выбранной вами скорости, если вы не переписываете обработку полностью (например, на приведенную ниже) .

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

1 голос
/ 17 января 2010

Для управления ресурсами типа Travian вам необходимо отслеживать, когда вы обновляли ресурсы пользователей в последний раз. Если вы читаете значения ресурсов (для обновления страницы или чего-то еще), вам нужно добавить количество ресурсов, полученных со времени «последнего обновления» (в зависимости от количества полей ресурсов и бонусов, которые получает пользователь) и отправить это значение браузер. Вы также можете использовать скрипт браузера let для вычисления этих сумм.

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

Если пользователь заканчивает создание поля ресурса, использует рынок, строит структуру и т. Д., Вам нужно обновить количество ресурсов (и «время последнего обновления»), потому что вы не можете просто отслеживать события такого рода просто .

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

Для увеличения объема ресурсов между обновлениями страниц необходим метод, описанный Фрэнком Фармером. Просто вставьте количество ресурсов и «частоту усиления» в некоторый javascript и увеличивайте количество ресурсов каждую «частоту усиления» на единицу.

1 голос
/ 17 января 2010

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

0 голосов
/ 14 сентября 2013

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

Я использую клиентский JavaScript, который использует флеш-сокет, чтобы получать живые обновления от выделенного игрового сервера, работающего на хосте.

Я использую комплект xmlsocket из http://devpro.it/xmlsocket/

...