mergeПодбор матчей

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

Просмотрите это видео, чтобы начать работу с нашим сервисом Matchmaker:

✔️ Подготовка

Архитектура матчмейкинга

В этом руководстве будет сделан акцент на Matchmaking API и Backfill API.

Существует четыре (4) важных потока данных, когда задействован матчмейкинг:

  1. Matchmaking API используется игровыми клиентами для взаимодействия с Matchmaker:

    1. для управления группами, назначения серверов и мониторинга,

    2. для измерения пинга с помощью Пинг-маяки.

  2. Развертывания API используется Matchmaker для развертывания, масштабирования и управления вашими выделенными серверами.

  3. Сетевые трансляции (Netcode Transports) используются для связи между игровыми клиентами и выделенными серверами.

  4. Подробный обзор для замены или добавления игроков в работающий сервер.

circle-info

После релиза, ваш матчмейкер должен работать круглосуточно (24/7) чтобы игроки по всему миру могли присоединяться к серверам.

🍀 Простой пример

Начните с простого примера и протестируйте базовый поток игроков в матчмейкинге:

  • создание экземпляра матчмейкера на общем Подробный обзор,

  • определение правил и настроек в вашем матчмейкере Подробный обзор,

  • тестирование потока игроков и управление билетами с помощью 📗 API.

1. Настройка на бесплатном тарифе

☑️ Зарегистрируйте бесплатный аккаунт Edgegaparrow-up-right и откройте страницу панели управления Matchmakerarrow-up-right.

☑️ Нажмите Создать Matchmaker сначала, затем введите:

  • имя матчмейкера - для вашей внутренней ссылки, например quickstart-dev ,

  • загрузите нашу конфигурацию Simple Example в формате JSON.

🍀 Простой пример (минимальная рекомендуемая конфигурация):

triangle-exclamation

Устранение неполадок и FAQ:

☑️ Если ошибок валидации не появилось, нажмите Создать и Запустить и дождитесь завершения процесса. В результате будет запущен новый бесплатный кластер с вашим простым примером matchmaker.

✅ Теперь вы можете перейти к следующему шагу.

2. Изучение конфигурации

По мере выпуска обновлений для Matchmaker каждая новая версия использует семантическое версионирование чтобы четко сообщать о влиянии изменений, интерпретируя формат major.minor.patch:

  • 🔥 major версии включают ломающие изменения и требуют проверки интеграции,

  • 🌟 minor версии включают существенные обратно совместимые улучшения,

  • 🩹 patch версии включают исправления ошибок и небольшие улучшения.

Включить инспекцию билетов чтобы лучше понимать и отлаживать возможные потоки матчмейкинга в процессе разработки. Мы рекомендуем отключать inspect API для вашего рабочего matchmaker.

Некоторые развертывания могут привести к ошибкам. Мы пытаемся решить это, повторяя попытку развертывания до max_deployment_retry_count раз автоматически (без подтверждения клиента).

Чтобы предотвратить зависание неожиданных падений клиента или оставленных билетов, незамеченные билеты будут отменены после ticket_expiration_period в результате их статус изменится на ОТМЕНЁН а затем окончательно удалены после ticket_removal_period .

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

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

  • имя по вашему выбору, например - размер матча,

  • тип правила, также известный как оператор, например - player_count,

  • и, наконец, атрибуты оператора, например team_count или max_team_size.

Правило количества игроков

Это специальное правило, определяющее, сколько игроков нужно для начала назначения:

  • team_count относится к числу команд, 1 команда может использоваться для кооперативного режима или режима все против всех,

  • min_team_size относится к минимальному количеству игроков в команде.

  • max_team_size относится к максимальному количеству игроков в команде.

Наш простой пример демонстрирует кооперативную игру на 2 игрока.

circle-exclamation

Правило задержек (Latencies Rule)

✅ Теперь вы можете перейти к следующему шагу.

3. Просмотр сведений об экземпляре

☑️ Просмотрите сведения о вашем новом matchmaker в нашей панели управления после его инициализации:

  • Статус показывает состояние сервиса, может быть ONLINE, OFFLINE или ERROR.

  • Идентификатор помогает сотрудникам Edgegap быстро найти ваш matchmaker, если вам нужна помощь в устранении неполадок.

  • Запущен в может быть полезен для отслеживания времени последнего обновления.

  • Размер соответствует одному из наших ценовых тарифовarrow-up-right.

  • URL API будет использоваться игровыми клиентами и игровыми серверами для связи с вашим matchmaker.

  • URL Swagger — удобный GUI спецификации openAPI, который мы предоставляем для изучения схемы API.

  • Токен аутентификации — уникальный секретный токен, используемый игровыми клиентами и игровыми серверами для аутентификации.

triangle-exclamation

Чтобы протестировать ваш новый matchmaker, вам понадобятся URL Swagger, URL API и токен аутентификации.

✅ Теперь вы можете перейти к следующему шагу.

circle-info

Чтобы обновить правила matchmaker в разработке, отредактируйте конфигурацию и перезапустите её.

circle-check

4. Тестирование Tickets API

circle-info

Пожалуйста, подождите до 5 минут после запуска matchmaker, чтобы дать время для завершения распространения DNS.

☑️ Сначала, откройте ваш URL Swagger чтобы просмотреть схему openAPI в GUI swagger:

☑️ Нажмите Авторизоваться 🔒, вставьте ваш Токен аутентификациии подтвердите, нажав Авторизоваться.

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

☑️ Предпросмотрите ваш запрос:

  • обратите внимание на player_ip установленное в null - это заставит Matchmaker использовать IP-адрес, автоматически добавленный к вашему запросу (см. Сервер-сервер для альтернатив),

  • profile относится к вашему Профили (очереди),

  • attributes включите значения для правил вашего matchmaker, в данном случае для правила задержек (latencies) правило,

    • — это единственное правило, которое не требует атрибутов в билетах игроков. player_count ☑️ Нажмите

Выполнить и просмотрите ответ на запрос вашего билета игрока: id

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

  • — это уникальный идентификатор группы, выдаваемый каждому билету; одиночный игрок представлен как группа из 1 человека team_id,

  • — это уникальный идентификатор команды, выдаваемый каждому игроку после того, как TEAM_FOUND статус достигнут, каждая команда может содержать несколько групп, не превышая сконфигурированный размер команды

  • player_ip assignment

  • установлен в чтобы указать, что билет не был сопоставлен или назначен на сервер, null created_at

  • дает информацию о том, когда билет игрока был создан для использования в игровом интерфейсе, status

  • указывает текущий статус билета; все билеты начинаются в ПОИСКЕ SEARCHING .

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

☑️ Сверните POST /tickets и откройте GET /tickets/{ticketId}, затем нажмите Попробовать.

☑️ Введите ID билета из ответа на предыдущем шаге и нажмите и просмотрите ответ на запрос вашего билета игрока:.

☑️ Просмотрите обновленное назначение для вашего билета игрока:

  • статус изменился на MATCH_FOUND сначала, при этом сохраняя установлен в установленное в null чтобы указать, что игроки нашли матч и сервер назначается,

Выполнить и просмотрите ответ на запрос вашего билета игрока: снова, чтобы проверить ваш билет, и просмотреть обновленное назначение по вашему билету:

  • статус изменился на HOST_ASSIGNED с установлен в содержащим сведения о назначенном сервере.

chevron-rightУстранение неполадок и FAQhashtag

Мой билет застрял в SEARCHING .

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


Мой билет застрял, постоянно переключаясь между MATCH_FOUND и статус достигнут, повторно.

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


Мой билет сразу переходит в ОТМЕНЁН.

  • Ваш билет достиг срока действия. Создайте новый билет или увеличьте период истечения в вашей конфигурации для тестирования.


Я получаю HTTP 404 Not Found при проверке моего билета.

  • Ваш билет был удален либо по запросу DELETE, либо по достижении периода удаления (начинается после истечения срока действия билета, определенного в вашей конфигурации). Создайте новый билет или увеличьте периоды истечения/удаления в вашей конфигурации для тестирования.

☑️ Просмотрите ваше новое развертывание в нашей панели управленияarrow-up-right:

  • обратите внимание, что каждое развертывание помечается всеми ID билетов и профилем для повышенной трассируемости.

☑️ Попробуйте подключиться из вашего игрового клиента к назначенному серверу.

circle-exclamation

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

✅ Теперь вы можете перейти к следующему шагу.

circle-info

Спецификацию openAPI для тестирования можно найти по адресу {matchmaker-url}/swagger/v1/swagger.json.

5. Интеграция в игру

Matchmaker интегрируется с:

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

☑️ В Игровой клиент, убедитесь, что вы обрабатываете повторяемые 429 Too Many Requests ошибки с экспоненциальным бэкоффом и повторной попыткой, давая matchmaker время восстановиться во время внезапных всплесков трафика.

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

  • 404 Not Found - билет был удалён,

  • 500 Internal Server Error - временный сбой сервиса.

☑️ В Игровой сервер, читайте предпочтения игроков и начальный контекст сервера:

  1. Внедренные переменные (Matchmaker) для получения начальных данных матчмейкинга игроков.

  2. Внедренные переменные (Версии приложений) для параметров версий, настроек и секретов.

  3. Внедренные переменные (Развертывание) для информации о развертывании, IP, местоположении и т.д.

☑️ Как только игроки подключатся, Игровой сервер и игровые клиенты запускают сцену загрузки — 3D сцену, лобби-подобный социальный интерфейс или экран загрузки с индикатором прогресса, чтобы показать, что инициализация идет.

☑️ Убедитесь, что ваше развертывание будет остановленоarrow-up-right правильно после завершения матча.

🙌 Поздравляем, вы завершили интеграцию матчмейкинга! Чтобы узнать больше, продолжайте чтение.

🏁 Расширенный пример

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

🎾 Пользовательское лобби

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

circle-info

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

circle-check

🥛 Демонстрация Backfill

Опираясь на Подбор матчей, эта конфигурация демонстрирует Backfill с Группы.

⚔️ Соревновательные игры

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

Вы можете определять несколько команд с 1 или более игроками в каждой, например:

Режим игры
Количество команд
Размер команды
Всего игроков

5v5 FPS

2

5

10

5v5 MOBA

2

5

10

20x3 Королевская битва

20

3

60

10 человек Free For All

1

10

10

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

  • Для всех матчей:

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

    • Подробный обзор для заранее созданных партий и чтобы предотвратить превышение размеров команд,

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

    • выделяйте больше CPU или памяти с разными Приложения и версии для конкретных профилей,

  • Для казуальных матчей:

    • опускайте ограничения ранга, чтобы максимально ускорить поиск матчей и повысить заполняемость,

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

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

    • убирайте ограничения по задержке, чтобы гарантировать матч через 3 минуты (180 с) времени в очереди.

  • Для соревновательных матчей:

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

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

  • Для топ-1% матчей с высоким уровнем навыков (challengers):

    • используйте числовые рейтинги навыков (ELO) для точного контроля распределения навыков в матчах,

    • ждите дольше перед ослаблением требований по задержке из-за меньшего числа игроков.

circle-check

🤝 Кооперативные игры

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

При количестве команд 1 и максимальном размере команды 4, требуется до 4 игроков на матч.

Определяйте несколько Профили (очереди) для правил и настроек, специфичных для режимов:

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

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

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

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

  • ограничивайте разницу уровней игроков, чтобы требовать схожую степень прогресса в игре,

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

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

  • Подробный обзор для заранее созданных партий и заполнения команд без превышения мощностей сервера,

  • выделяйте больше CPU или памяти, используя разные Приложения и версии для других профилей.

Начните с идеальных условий и расширяйте ограничения чтобы обеспечить быстрый подбор матчей:

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

  • увеличивайте допустимую разницу уровней игроков, чтобы найти больше игроков,

  • уменьшайте минимальный размер команды, чтобы требовать меньше игроков и начинать игру раньше,

    • сервер может заполнить пустые слоты ИИ-напарниками,

    • или Подробный обзор чтобы добавить игроков позже,

  • установите минимальный размер команды в 1, чтобы запустить игру в одиночку после 150 с времени в очереди

🎈 Социальные игры

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

При количестве команд 1 (все против всех) и максимальном размере команды 50, требуется до 50 игроков на матч.

Определите Профили (очереди) для правил и настроек, специфичных для режимов:

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

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

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

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

  • Подробный обзор для заранее созданных лобби или заполнения команд без превышения мощности сервера,

  • выделяйте больше CPU или памяти, используя разные Приложения и версии для других профилей.

Начните с идеальных условий и расширяйте ограничения чтобы обеспечить быстрый подбор матчей:

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

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

    • сервер может заполнить пустые слоты игроками-ИИ,

    • или Подробный обзор чтобы добавить игроков позже,

  • установите минимальный размер команды в 1, чтобы запустить игру в одиночку после 150 с времени в очереди.

Последнее обновление

Это было полезно?