?

Log in

No account? Create an account

ru_decline


Сообщество посвященное онлайн игре Decline


Previous Entry Share Next Entry
Докладываю
e_maksimov wrote in ru_decline
Движок игры в моей реализации состоит из двух частей: фронтэнд и бэкэнд.

Фронтэнд обеспечивает взаимодействие с пользователем, он получает запросы игроков и отсылает им результат обработки в том виде, из доступных, который игрок затребует. Сейчас он обучен отдавать в HTML, можно научить отдавать еще и в JSON или выдавать сериализованные данные для использования в клиенте - вопрос фантазии, времени и необходимости. Процессов фронтэнда может быть множество, им не требуется между собой взаимодействовать, а раз так, то можно легко нарастить производительность игры, вплоть до задействования нескольких серверов только под нужды фронтэнда. Скрипты фронтэнда могут выполнятся практически на любом вебсервере допускающем выполнение PHP и некоторых его модулей, к примеру, на моем тестовом сервере крутится под Lighttpd в fast-cgi. На фронтэнд можно навесить PHP-акселератор, поставить перед ним тот же ngnix для отдачи статики и прочие ништяки. Нам такие фичи вряд ли пригодятся, но, как уже писал, я баловался с технологиями и пробовал различные решения одной задачи.

Бэкэнд - это демон, единственный процесс постоянно висящий в памяти сервера и выполняющий просчет игровых событий. Практически вся игровая логика, правила игры и ее формулы внутри этого демона.

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

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

К чему это я все написал? Демон в целом готов, привести формулы к нужному виду можно и позже. Осталось допилить фронтэнд, работа простая, но муторная в плане написания шаблонов HTML-интерфейса и до конца февраля вряд ли успею запустить тестирование, а всякие служебные интерфейсы-бэкапы и отчеты сделаю по ходу тестирования.