Лучшие практики MMO на основе браузера - PullRequest
3 голосов
/ 21 июля 2010

Я разрабатываю онлайн-браузерную игру, основанную на картах Google, с бэкэндом Django, и я приближаюсь к тому моменту, когда мне нужно принять решение о том, как реализовать (бэкэнд) синхронизированные события - то есть количество владения NPC повышение (например, население города должно расти на основе некоторых переменных - размера города, скорости подачи заявок).

Возможные решения, которые я нашел:

  • Помещение поставленных в очередь действий в таблицу и обработка их вместе с каждым запросом.
    • Проблемы: огромные накладные расходы, сложнее реализовать
  • Использование cron или чего-то подобного
    • Проблема: это внешний инструмент, и мне нужно как можно меньше внешних инструментов.

Есть ли другие решения?

Ответы [ 2 ]

5 голосов
/ 21 июля 2010

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

Если вы пытаетесь уменьшить накладные расходы базы данных, вам следует хранить значения с их последним временем обновления и темпами роста и обновлять эти строки только при изменении количества или скорости роста.

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

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

2 голосов
/ 21 июля 2010

Если я правильно понял ваш вопрос, вам следует взглянуть на Celery, который представляет собой распределенную очередь задач.http://ask.github.com/celery/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...