Почему вы должны запускать свои игровые серверы вне зависимости от чата

1656640450 pochemu vy dolzhny zapuskat svoi igrovye servery vne zavisimosti ot

Джо Хэнсон

RvAFM7dys3pkReHAYIFGy2wovsV1zH-LoWAX

Когда дело доходит до создания игр для нескольких игроков, разработчики часто сталкиваются с дилеммой.

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

Потому что, в конце концов, это только сообщение в чате, не правда ли? Небольшие сообщения посылаются одному пользователю или небольшой группе, поэтому вы можете просто использовать то, что уже создано… что может повредить?

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

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

Микросервисы делают вашу игру более управляемой

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

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

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

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

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

kxjPuS481xkdGVK8aUOcBCxl-IF3jKlz9ltN

На рисунке выше изображена игровая инфраструктура, где чат отделен от игровых серверов.

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

Обеспечьте бесперебойную игру и производительность чата

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

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

Скажем, у вас есть онлайн игра на боевой арене, например League of Legends или EVE Online. У вас могут быть сотни игроков в одном мире одновременно. Это тысячи сообщений, которые посылаются через ваши игровые серверы, доставляя каждый вход, созданный каждым игроком. Теперь добавьте сообщение в чате. Вполне возможно, что игроки могут спамить канал чата и намеренно замедлить игровой сервер, поскольку все сообщения будут иметь одинаковый приоритет. Конечно, можно было бы проверить наличие таких пользователей, но потребуется дополнительная обработка, которая съест ресурсы игрового сервера.

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

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

UDP против TCP: когда нужны оба, а когда нет

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

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

TCP гарантирует доставку сообщений, что делает его отличным вариантом для чата. Вы увидите отличную производительность, запустив свою игру на UDP и социальные функции на TCP.

2rINsVWUD5qCbgxJYxq0cYIvUxHFV0iCkQdJ

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

Задержка — это еще одна вещь, которую следует учитывать, поскольку существуют разные стандарты задержки для функциональных возможностей для нескольких игроков и социальных функций. Для многопользовательских игр, обеспечивающих состояние игры и отправляющих данные игрока, отраслевой стандарт составляет не более 20 мс. В то время как для программы чата максимальная задержка для доставки сообщения чата составляет 250 мс.

Итак, у вас есть два разных типа обмена сообщениями в реальном времени с двумя разными стандартами. Если они работают отдельно, вы можете управлять каждым в соответствии с потребностями.

С легкостью добавляйте новые социальные функции

Запуск чата в качестве отдельной службы и выбор стандартного протокола (XMPP, WebSockets) или размещаемой службы (PubNub) открывает возможность легко добавлять новые мощные социальные функции.

Начните с основного чата, позволяющего пользователям проводить индивидуальные и групповые чаты. С этим у вас есть базовая инфраструктура, а также базовая публикация/подписка. И есть многие другие социальные функции, которые можно легко использовать.

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

Ожидать

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

Первоначально опубликовано на www.pubnub.com.

Добавить комментарий

Ваш адрес email не будет опубликован.