Как создаются многопользовательские онлайн-ролевые игры? - PullRequest
9 голосов
/ 14 сентября 2009

Как создаются многопользовательские ролевые онлайн-игры?

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

  • Управляют ли они сценариями, которые выполняются при запросах страниц? или установлены службы, которые работают в фоновом режиме и управляют связью с подключенными клиентами?

  • Они используют другие протоколы? потому что HTTP не позволяет серверам передавать данные клиентам.

  • Как работают «движки», чтобы централизованно обрабатывать сотни конфликтующих игровых событий?

Спасибо за ваше время.

Ответы [ 6 ]

5 голосов
/ 14 сентября 2009

Многие дороги ведут в Рим, а многие архитектуры ведут к MMORPG.

Вот несколько общих соображений по поводу ваших пунктов:

  • Серверная инфраструктура должна поддерживать возможность масштабирования ... добавлять дополнительные серверы по мере увеличения нагрузки. Кстати, это хорошо подходит для облачных вычислений. В настоящее время у меня запущено большое приложение для финансовых услуг, которое нужно увеличивать и уменьшать в зависимости от времени суток. Мы используем Amazon AWS для практически мгновенного добавления и удаления виртуальных серверов.
  • MMORPG, с которыми я знаком, вероятно, использует не веб-сервисы для связи (так как они не имеют состояния), а скорее пользовательскую серверную программу (например, сервис, который прослушивает сообщения TCP и / или UDP).
  • Вероятно, они используют собственный протокол на основе TCP и / или UDP (см. Связь с сокетом)
  • Большинство игр сегментированы на «миры», ограничивая количество игроков, находящихся в одной виртуальной вселенной, количеством игровых событий, которые может достаточно обработать один сервер (вероятно, с большим количеством процессоров и большим количеством памяти). Точный механизм обработки событий зависит от требований разработчика игры, но, как правило, я ожидаю, что входящие события будут помещены в очередь с приоритетами (с приоритетом по времени получения и / или времени отправки и, возможно, по другим критериям в духе «насколько плохо, если мы игнорируем это событие? ").

Это очень большой предмет в целом. Я бы посоветовал вам проверить на Amazon.com книги на эту тему.

3 голосов
/ 14 сентября 2009

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

Я предполагаю, что серверы будут работать в Linux, BSD или Solaris почти в 99% случаев.

Управляют ли они сценариями, которые выполняются при запросах страниц? или установлены службы, которые работают в фоновом режиме и управляют связью с подключенными клиентами?

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

Используют ли они другие протоколы? потому что HTTP не позволяет серверам передавать данные клиентам.

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

Как работают «движки», чтобы централизованно обрабатывать сотни конфликтующих игровых событий?

Большинство ММО имеют зоны, которые ограничивают это определенным количеством людей. Для тех, у кого есть сотни людей в одной области, обычно есть большая задержка. Серверу приходится иметь дело с сотнями заклинаний, которые отправляются на его пути, и он должен рассчитать количество урона для каждого из них. Для больших пяти ММО, которые я представляю, есть команды из 10-20 очень умных, математически одаренных разработчиков, которые работают над этим ежедневно, и нет ни одной ММО, которая бы все сделала правильно, большинство перерыв после 100 игроков.

-

Ищите Wowemu (официального сайта нет, и я не хочу ссылаться на хитрый сайт). Это основано на ApireCore , который является симулятором MMO или, по сути, реверс-инженером протокола WoW. Это то, что убегают частные серверы WoW. Из того, что я помню Wowemu это

  • MYSQL
  • Python

Однако ApireCore - это C ++.

Бэкенд для Wowemu удивительно прост (однако я попробовал его в 2005 году) и, вероятно, полностью упростил схему базы данных. Это дает вам хорошее представление о том, что происходит.

2 голосов
/ 14 сентября 2009

Поскольку для ММО в целом требуются ресурсы бизнеса для разработки и развертывания, и в этот момент они представляют собой ценный IP-адрес компании, нет тонны общедоступной информации о реализации.

Одна вещь, которая является вполне достоверной, заключается в том, что, поскольку MMO в целом используют собственный клиент и 3D-рендеринг, они не используют HTTP, потому что они не являются веб-браузерами. Онлайн-игры будут иметь свои собственные протоколы, построенные поверх TCP / IP или UDP.

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

Для большого папы, World of Warcraft, мы можем догадаться, что их база данных - Oracle, потому что списки вакансий Blizzard часто ссылаются на опыт Oracle как требование / плюс. Они используют Lua для сценариев пользовательского интерфейса. C ++ и OpenGL (для Mac) и Direct3D (для ПК) могут рассматриваться как языки реализации для игровых клиентов, потому что это то, для чего создаются игры.

Одна компания, которая круто обсуждает их реализацию - это CCP, создатели Eve online. Они опубликовали ряд презентаций и статей об инфраструктуре Евы, и это особенно интересный случай, потому что они используют Stackless Python для многих реализаций Евы.

http://www.disinterest.org/resource/PyCon2006-StacklessInEve.wmv http://us.pycon.org/2009/conference/schedule/event/91/

Недавно была опубликована статья в журнале Game Developer об архитектуре Евы:

https://store.cmpgame.com/product/3359/Game-Developer-June%7B47%7DJuly-2009-Issue---Digital-Edition

1 голос
/ 11 июня 2011

Традиционно ММО основаны на серверных приложениях C ++, работающих в Linux, обменивающихся данными с базой данных для внутреннего хранилища и толстых клиентских приложений, использующих OpenGL или DirectX.

Во многих случаях клиент и сервер встраивают механизм сценариев, который позволяет определять поведение на языке более высокого уровня. EVE примечателен тем, что он в основном реализован на Python и работает поверх Stackless, а не в основном C ++ с некоторыми высокоуровневыми сценариями.

Обычно сервер сидит в цикле, считывая запросы от подключенных клиентов, обрабатывая их для обеспечения игровой механики и затем отправляя обновления клиентам. UDP можно использовать для минимизации задержки и повторной передачи устаревших данных, но поскольку в RPG обычно не используется динамический игровой процесс, TCP / IP обычно является лучшим выбором. Комета или BOSH могут использоваться для обеспечения двунаправленной связи по HTTP для веб-ММО, и веб-сокеты скоро станут хорошим вариантом.

Если бы я создавал новую MMO сегодня, я бы, вероятно, использовал XMPP, BOSH и построил бы клиент на JavaScript, так как это позволило бы ему работать без полной загрузки клиента и взаимодействовать с IM-системами на основе XMPP и голосовыми системами (такими как gchat) , Как только WebGL получит широкую поддержку, это позволит использовать трехмерные виртуальные миры на основе браузера.

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

Вот хорошая презентация об архитектуре Second Life Яна Уилкса, который был директором по операциям здесь: http://www.infoq.com/presentations/Second-Life-Ian-Wilkes

Большинство моих выступлений по технологии Second Life связаны с моим блогом по адресу: http://jimpurbrick.com

1 голос
/ 14 сентября 2009

Радиоподкаст Software Engineering имеет эпизод с Джимом Пурбриком о Second Life , в котором обсуждаются серверы, миры, масштабирование и другие внутренности MMORPG.

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

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

...