Матчмейкинг
Быстро начните работу с матчмейкингом и изучите примеры сценариев для разных жанров.
Матчмейкинг в играх, основанных на матчах, как правило, стремится к следующему:
найти других игроков на основе таких критериев, как регион, задержка, навыки или параметры игры;
найти серверы чтобы подключиться к ним в зависимости от доступной вместимости [или пинга, региона, навыков, карты, режима];
запустить новый сервер если существующие серверы заполнены или не соответствуют критериям игрока.
Опыт игрока стоит на первом месте, определяя наши основные цели:
высокая заполняемость матчей и интеграция социальных функций (игра с друзьями в группах),
быстрые матчи с контролируемым качеством матчей (низкая задержка, общие предпочтения),
надежный и предсказуемый процесс матчмейкинга с глобальной доступностью.
Следуйте этому видео, чтобы начать работу с нашим сервисом Matchmaker:
✔️ Подготовка
Тестирование этого сервиса полностью бесплатно, кредитная карта не требуется.
Бесплатный тариф предоставляет до 3 часов работы на нашем общем тестовом кластере после каждой перезагрузки.
В этом руководстве предполагается, что вы уже:
опубликовали ваше серверное приложение на Edgegap (Unreal Engine, Unity),
успешно подключились с игрового клиента к вашему серверу на Edgegap.
Архитектура матчмейкинга
В этом руководстве мы сосредоточимся на API матчмейкинга и Backfill API.

При использовании матчмейкинга есть четыре (4) важных потока данных:
API матчмейкинга используется игровыми клиентами для связи с Matchmaker:
для управления группами, назначения серверов и мониторинга,
для измерения пинга с Пинг-маяки.
Развертывания API используется для развертывания, масштабирования и управления вашими выделенными серверами через Matchmaker.
Транспортные протоколы Netcode используются для связи между игровыми клиентами и выделенными серверами.
Подробный обзор чтобы заменить игроков на работающем сервере или добавить их.
🍀 Простой пример
Начните с простого примера и проверьте базовый поток игроков в матчмейкинге:
создание экземпляра матчмейкера на общем Подробный обзор,
определение правил и настроек в вашем матчмейкере Подробный обзор,
тестирование потока игроков и управление тикетами с помощью 📗 API.
1. Настройка на бесплатном тарифе
☑️ Зарегистрируйте бесплатную учетную запись Edgegap и откройте страницу панели управления Matchmaker.
☑️ Нажмите Создать Matchmaker сначала, затем введите:
имя матчмейкера — для вашего собственного удобства, напр.
quickstart-dev,загрузите нашу JSON-конфигурацию простого примера.
🍀 Простой пример (минимальная рекомендуемая конфигурация):
Устранение неполадок и FAQ:
☑️ Если ошибок проверки не появилось, нажмите Создать и запустить и дождитесь завершения процесса. В результате будет запущен новый бесплатный кластер с вашим матчмейкером Simple Example.
✅ Теперь вы можете перейти к следующему шагу.
2. Изучение конфигурации
По мере выпуска обновлений Matchmaker каждая новая версия использует семантическое версионирование чтобы наглядно показать влияние изменений, интерпретируя формат major.minor.patch:
🔥
majorверсии содержат несовместимые изменения и требуют проверки интеграции,🌟
minorверсии содержат существенные обратносовместимые улучшения,🩹
patchверсии содержат исправления ошибок и небольшие улучшения.
Проверка тикетов чтобы лучше понимать и отлаживать возможные потоки матчмейкинга в процессе разработки. Мы рекомендуем отключить API проверки для вашего рабочего матчмейкера.
Некоторые развертывания могут приводить к ошибкам. Мы пытаемся исправить это, повторяя развертывание до max_deployment_retry_count раз автоматически (без подтверждения клиента).
Чтобы неожиданные сбои клиента или брошенные тикеты не зависали и не занимали ресурсы вашего матчмейкера, неподобранные тикеты будут отменены через ticket_expiration_period в результате чего их статус изменится на CANCELLED и затем окончательно удалены через ticket_removal_period .
Ядро нашей логики матчмейкинга настраивается в Профили (очереди). Каждый профиль — это полностью изолированная очередь матчмейкинга, указывающая на Приложения и версии с заранее заданным количеством требуемых ресурсов CPU и памяти (RAM).
Правила в начальном наборе правил должны выполняться для объединения игроков в группу, и каждое определяется тремя свойствами:
имя на ваш выбор, напр. -
размер матча,тип правила, также известный как оператор, напр. -
player_count,и, наконец, атрибуты оператора, напр.
team_countилиmax_team_size.
Правило количества игроков
Это специальное правило, определяющее, сколько игроков нужно сопоставить для начала назначения:
team_countотносится к числу команд, 1 команда может использоваться для кооперативных режимов или режимов free-for-all,min_team_sizeотносится к минимальному числу игроков в команде.max_team_sizeотносится к максимальному числу игроков в команде.
Наш простой пример демонстрирует кооперативную игру с 2 игроками.
Правило задержек
задержки — это специальное правило, оптимизирующее пинг матчей игроков:
уменьшить задержку между клиентом и сервером, удаляя регионы с высокой задержкой (выше порога),
повысить справедливость матчей, группируя игроков с похожей задержкой (ниже разницы).
✅ Теперь вы можете перейти к следующему шагу.
3. Просмотр сведений об экземпляре
☑️ Просмотрите сведения о вашем новом матчмейкере в нашей панели управления после его инициализации:

Статус указывает на состояние сервиса и может быть ONLINE, OFFLINE или ERROR.
Идентификатор помогает сотрудникам Edgegap быстро найти ваш матчмейкер, если вам понадобится помощь с устранением неполадок.
Запущен в может быть полезно для отслеживания времени последнего обновления.
Размер соответствует одному из наших тарифных планов.
API URL будет использоваться игровыми клиентами и игровыми серверами для связи с вашим матчмейкером.
Swagger URL — это удобный GUI спецификации openAPI, который мы предоставляем для изучения схемы API.
Auth Token — это уникальный секретный токен, используемый игровыми клиентами и игровым сервером для аутентификации.
Чтобы протестировать ваш новый матчмейкер, вам понадобятся Swagger URL, API URL и Auth Token.
✅ Теперь вы можете перейти к следующему шагу.
4. Тестирование API тикетов
☑️ Сначала, откройте ваш Swagger URL чтобы просмотреть схему openAPI в интерфейсе swagger:

☑️ Нажмите Авторизовать 🔒, вставьте ваш Auth Token, и подтвердите, нажав Авторизовать.

☑️ Прокрутите вниз до API тикетов - POST /tickets, разверните и нажмите Попробовать.

☑️ Предварительный просмотр вашего запроса:
обратите внимание
player_ipустановлено вnull- это заставит Matchmaker использовать IP-адрес, автоматически добавленный в ваш запрос (см. Сервер-сервер для альтернатив),профильотносится к вашему Профили (очереди),атрибутывключают значения для правил вашего матчмейкера, в данном случае длязадержкиправило,правило
player_count— это единственное правило, которое не требует каких-либо атрибутов в тикетах игроков.
☑️ Нажмите Выполнить и просмотрите ответ на ваш запрос тикета игрока:
id— это ваш уникальный идентификатор тикета матчмейкинга, сохраните его, чтобы позже проверить тикет,профильподтверждая выбор Профили (очереди),group_id— это уникальный идентификатор группы, выдаваемый каждому тикету; одиночный игрок представлен как группа из 1,team_id— это уникальный идентификатор команды, выдаваемый каждому игроку после того,TEAM_FOUNDкак достигается статус,player_ip— это определенный публичный IP-адрес игрока, независимо от метода идентификации,назначениеустановлено вnullчтобы показать, что тикет не был подобран или назначен на сервер,created_atсодержит информацию о том, когда тикет игрока был создан, для использования в игровом интерфейсе,статусуказывает текущий статус тикета, все тикеты начинают сSEARCHING.

☑️ Создайте второй тикет, нажав Выполнить еще раз, чтобы наши два игрока сопоставились и сервер был запущен.
☑️ Сверните POST /tickets и откройте GET /tickets/{ticketId}, затем нажмите Попробовать.
☑️ Введите идентификатор тикета из ответа на предыдущем шаге и нажмите Выполнить.

☑️ Просмотрите обновленное назначение для вашего тикета игрока:
статус изменился на
MATCH_FOUNDсначала, сохраняяназначениеустановлено вnullчтобы показать, что игроки сопоставлены и сервер назначается,

☑️ Нажмите Выполнить снова, чтобы проверить свой тикет, и просмотрите обновленное назначение для вашего тикета:
статус изменился на
HOST_ASSIGNEDсназначениесодержащий сведения о назначенном сервере.

☑️ Просмотрите ваше новое развертывание в нашей панели управления:
обратите внимание, что каждое развертывание помечено всеми идентификаторами тикетов и профилем для дополнительной отслеживаемости.

Через несколько секунд после нахождения совпадения участники переходят к status:HOST_ASSIGNED что означает, что ваш развертывание уже готово, а ваш игровой сервер инициализируется.
Каждый игрок читает свой ticket_id и назначение и пытаются подключиться, используя FQDN (URL развертывания) и внешний порт. В этот момент ваш игровой сервер может все еще инициализироваться, поэтому игрокам нужно повторять попытку подключения несколько раз, пока не будет превышено обычное время инициализации сервера:
Чтобы подключение из PIE (редактора) во время разработки и тестирования нажмите клавишу тильды ~ и введите open {URL}:{port} и дождитесь, пока редактор загрузит карту.
Чтобы подключение из сборки игрового клиента (и в рабочей production-среде) попробуйте
Unreal Engine ⚡ Integration Kit:
установить из Fab Marketplace (бесплатно для личного использования),
импортировать простой пример blueprint и настроить под свои нужды.
Чтобы подключите ваш Unity Editor или игровой клиент к вашему облачному развертыванию, укажите:
Развертывание URL указывающий на IP-адрес сервера, обычно в
NetworkManagerкомпоненте.внешний порт сопоставленный с внутренним портом прослушивания сервера, обычно в компоненте Transport.
Игровые клиенты должны сохранять свой ID назначения в постоянном хранилище между перезапусками игры, чтобы в случае сбоя игрового клиента они могли получить данные подключения и попытаться переподключиться.
☑️ Попробуйте подключиться из вашего игрового клиента к назначенному серверу.
☑️ Как только вы убедитесь, что можете без проблем подключиться к своему развертыванию и завершите тестирование, Остановите ваше развертывание чтобы освободить ресурсы в вашей учетной записи для следующей сборки.
✅ Теперь вы можете перейти к следующему шагу.
5. Интеграция игры
Matchmaker интегрируется с:
Игровой клиент, чтобы управлять группами, участниками, назначениями и тикетами,
Выделенный сервер, чтобы Подробный обзор после того, как игрок выходит.
☑️ В Игровой клиент, мы рекомендуем предоставлять игрокам обновления статуса тикета с помощью внутриигрового интерфейса для лучшего игрового опыта. См.:
Unreal Engine Инструменты разработчика:
прочитайте документацию от Betide Studios,
установите из Fab Marketplace (бесплатно для личного использования).
☑️ В Игровой клиент, убедитесь, что вы обрабатываете повторяемые 429 Too Many Requests ошибки с экспоненциальной задержкой и повторными попытками, давая матчмейкеру время восстановиться во время внезапных всплесков трафика.
☑️ В Игровой клиент, убедитесь, что вы обрабатываете неповторяемые ошибки:
404 Not Found- тикет был удален,500 Internal Server Error- временный сбой сервиса.
☑️ В Игровой сервер, считывайте предпочтения игрока и начальный контекст сервера:
Внедренные переменные (Matchmaker) чтобы получить начальные данные матчмейкинга игроков.
Внедренные переменные (App Versions) для параметров версий, настроек и секретов.
Внедренные переменные (Развертывание) для информации о развертывании, IP, местоположении и т. д...
☑️ Как только игроки подключатся, Игровой сервер и игровые клиенты запустите сцену загрузки - 3D-сцену, социальный интерфейс в стиле лобби или экран загрузки с индикатором прогресса, чтобы показать, что инициализация продолжается.
☑️ Убедитесь, что ваш развертывание будет остановлено корректно после завершения матча.
🙌 Поздравляем, вы завершили интеграцию матчмейкинга! Чтобы узнать больше, продолжайте читать.
🏁 Продвинутый пример
Полнофункциональная конфигурация, использующая все возможности матчмейкинга, включая Профили (очереди), Правила, а также Подробный обзор может выглядеть так:
🥛 Демонстрация Backfill
На основе Матчмейкинг, эта конфигурация демонстрирует Backfill с Группы.
При необходимости у некоторых игр могут быть особые требования к подбору игроков, например:
позволять новым игрокам присоединяться к идущим играм (друзья или "случайные игроки"),
заменять игроков, которые выходят (leavers) после запуска сервера, чтобы избежать перезапуска матча,
позволять зрителям присоединяться и наблюдать за турнирными или дружескими матчами (киберспорт),
собирать игроков на более крупных серверах, чтобы обеспечить больше социальных взаимодействий (MMO).
Бэкфилл — это серверный билет, представляющий игроков, в данный момент подключённых к серверу. Это гарантирует, что вновь добавленные игроки будут соблюдать ваши правила подбора при сопоставлении с текущими игроками.

Шаги для успешного выполнения бэкфилла:
Сервер должен создать по одному Backfill для каждой команды, которой не хватает игроков, используя значения из:
Реальные
назначениеданные, полученные из Внедряемые переменные (развёртывания).Текущих подключённых игроков'
билеты:из Подробный обзор (матчмейкера), предыдущих бэкфиллов'
assigned_ticketответа или тестовых данных, изменённых для соответствия конкретным игрокам,замените
backfill_group_sizeзначения на возможные размеры группы до доступной вместимости,
Игровые клиенты создают новые билеты (членства) и включают
backfill_group_sizeзначения:"1"если игрок подбирается в одиночку."2"если игрок является частью группы подбора с общим количеством участников 2x."new"если игроки включили возможность начинать новые игры в дополнение к присоединению к идущим играм.
Игровые клиенты переходят к Подробный обзор и сопоставляют игроков с подходящим бэкфиллом.
Если бэкфилленая группа не полностью заполнила команду, сервер может повторить этот процесс с билетами недавно добавленных игроков, чтобы добавить больше игроков и достичь нужного размера команды.
⚔️ Соревновательные игры
Соревновательные игры сосредоточены на том, чтобы игроки соревновались друг с другом за победу, будь то в одиночку (каждый сам за себя) или командами. Обеспечивайте честные и сбалансированные матчи, подбирая игроков или команды схожего уровня, и поддерживайте темп игры, быстро находя честных соперников.
Вы можете определить несколько команд, каждая с 1 или более игроками, например:
FPS 5v5
2
5
10
MOBA 5v5
2
5
10
Королевская битва 20x3
20
3
60
10 игроков, каждый сам за себя
1
10
10
Определите несколько Профили (очереди) для правил и настроек, специфичных для режима игры, и расширяйте по мере необходимости.
Для всех матчей:
ограничивайте задержку матчмейкинга чтобы не подбирать игроков, находящихся далеко,
Подробный обзор для заранее собранных групп и чтобы не превышать размер команд,
постепенно смягчайте ограничения по задержке со временем, чтобы находить больше игроков,
выделяйте больше CPU или памяти с помощью разных Приложения и версии для конкретных профилей,
Для казуальных матчей:
убирайте ограничения по рангу, чтобы максимизировать скорость подбора и процент заполнения матчей,
позвольте игрокам указывать предпочтения по карте, чтобы найти карту, подходящую всем,
указывайте размер группы для backfill, чтобы заменять вышедших игроков, не превышая размер команд,
снимайте ограничения по задержке, чтобы гарантировать матч после 3 минут (180 с) ожидания в очереди.
Для соревновательных матчей:
ограничивайте ранг, чтобы разрешать только соперников со схожим уровнем мастерства,
используйте ранги повышения или понижения, чтобы подбирать игроков на крайних значениях рейтинга лиги.
Для топ-1% матчей высокого уровня (претенденты):
используйте числовые рейтинги навыка (ELO), чтобы получить точный контроль над распределением навыка в матчах,
ждите дольше перед ослаблением требований к задержке из-за меньшего количества игроков.
🤝 Кооперативные игры
Кооперативные игры требуют, чтобы игроки работали вместе в команде ради общей цели или против ИИ-соперника. Согласуйте игроков со схожими предпочтениями и игровыми привычками. Заменяйте игроков, которые уходят, и улучшайте Пинг-маяки чтобы обеспечить отзывчивый игровой опыт.
При количестве команд 1 и максимальном размере команды 4, требуйте до 4 игроков на матч.
Определите несколько Профили (очереди) для правил и настроек, специфичных для режимов игры:
начните с минимум 4 игроков, чтобы удерживать игроков в очереди и максимизировать процент заполнения матча,
ограничивайте задержку матчмейкинга чтобы не подбирать игроков, находящихся далеко,
позвольте игрокам выбирать определенную сложность игры, чтобы соответствовать уровню мастерства каждого,
позвольте игрокам указывать предпочтения по карте, чтобы найти карту, подходящую всем,
ограничивайте разницу уровней игроков, чтобы требовать схожую степень прогресса в игре,
указывайте размер группы для backfill, чтобы заменять вышедших игроков, не превышая емкость сервера,
используйте флаги модерации, чтобы отделять игроков с низкой кармой и читеров от общей массы,
Подробный обзор для заранее собранных групп и чтобы заполнять команды, не превышая емкость сервера,
выделяйте больше CPU или памяти, используя разные Приложения и версии для других профилей.
Начните с идеальных условий и расширяйте ограничения чтобы обеспечить быстрые матчи:
постепенно ослабляйте ограничения по задержке, чтобы находить больше игроков,
увеличивайте допустимую разницу уровней игроков, чтобы находить больше игроков,
уменьшайте минимальный размер команды, чтобы требовать меньше игроков и начинать игру раньше,
сервер может заполнить пустые места ИИ-напарниками,
или Подробный обзор чтобы добавить игроков позже,
установите минимальный размер команды 1, чтобы запустить игру в одиночку после 150 с ожидания в очереди.
🎈 Социальные игры
Социальные игры сосредоточены на построении связей и отношений между игроками через сотрудничество, общение и общий опыт. Поддерживайте большое количество игроков, максимизируйте процент заполнения матча и согласуйте предпочтения игроков и игровые привычки. Заменяйте игроков, которые уходят, и обеспечивайте высокий Пинг-маяки чтобы обеспечить отзывчивый игровой опыт.
При количестве команд 1 (каждый сам за себя) и максимальном размере команды 50, требуйте до 50 игроков на матч.
Определите Профили (очереди) для правил и настроек, специфичных для режимов игры:
ограничивайте задержку матчмейкинга чтобы не подбирать игроков, находящихся далеко,
позвольте игрокам указывать предпочтения по режиму игры и находить режим, подходящий всем,
указывайте размер группы для backfill, чтобы заменять вышедших игроков, не превышая емкость сервера,
используйте флаги модерации, чтобы отделять игроков с низкой кармой и читеров от общей массы,
Подробный обзор для заранее собранных лобби или чтобы заполнять команды, не превышая емкость сервера,
выделяйте больше CPU или памяти, используя разные Приложения и версии для других профилей.
Начните с идеальных условий и расширяйте ограничения чтобы обеспечить быстрые матчи:
постепенно ослабляйте ограничения по задержке, чтобы находить больше игроков,
медленно уменьшайте минимальный размер команды, чтобы требовать меньше игроков и начинать игру раньше,
сервер может заполнять пустые места ИИ-игроками,
или Подробный обзор чтобы добавить игроков позже,
установите минимальный размер команды 1, чтобы запустить игру в одиночку после 150 с ожидания в очереди.
Последнее обновление
Это было полезно?

