Возможна ли многопользовательская игра в реальном времени с использованием Google App Engine? - PullRequest
6 голосов
/ 18 февраля 2011

В настоящее время я разрабатываю многопользовательскую игру в реальном времени и оцениваю различные облачные хостинговые решения.Я не уверен, соответствует ли App Engine моим потребностям, и был бы признателен за любые отзывы.

По сути, я хочу, чтобы система работала так: игрок A вычисляет раунд n и генерирует хеш из игрысостояние в конце этого раунда.Затем он отправляет свои команды для этого раунда и хэш в виде HTTP POST на сервер.Проигрыватель B выполняет то же самое параллельно.

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

Подобный раунд должен длиться около полсекунды, то есть два запроса на игрока в секунду.

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

Я не могу использовать XMPP, потому что хочу, чтобы моя игра могла работать в ограниченных сетях, поэтому он должен быть ограниченна http через порт 80.

Есть ли способ обеспечить принудительное выполнение двух экземпляров приложения?Есть ли в моем дизайне явно очевидные недостатки?Как вы думаете, такая архитектура может работать на App Engine?Если нет, какое облачное решение вы бы предложили?

1 Ответ

13 голосов
/ 18 февраля 2011

Я верю, что это может сработать.Ключевым API для вас, чтобы узнать о / test, вероятно, будет Channel API .Это то, что позволило бы обмениваться данными между клиентом и сервером.

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

Если вы решите, что не можете рисковать потерей таких данных, вам необходимо сохранить их в хранилище данных, а это значит, что вам придется экспериментировать, чтобы убедиться, что вы сможете выдержать 2 хода за ход.Я думаю, что это возможно, но не тривиально.Если бы вы сказали 1 ход каждые 3 секунды, я бы сказал «без проблем».Но несколько обновлений одной сущности в секунду начинают увеличиваться в сравнении с практическим пределом числа операций записи в секунду, особенно если они выполняются транзакциями.

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

...