For the complete documentation index, see llms.txt. This page is also available as Markdown.

Матчмейкинг

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

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

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

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

  • запустить новый сервер если существующие серверы заполнены или не соответствуют критериям игрока.

Опыт игрока стоит на первом месте, определяя наши основные цели:

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

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

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

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

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

Тестирование этого сервиса полностью бесплатно, кредитная карта не требуется.

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

В этом руководстве предполагается, что вы уже:

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

В этом руководстве мы сосредоточимся на API матчмейкинга и Backfill API.

При использовании матчмейкинга есть четыре (4) важных потока данных:

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

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

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

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

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

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

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

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

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

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

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

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

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

☑️ Зарегистрируйте бесплатную учетную запись Edgegap и откройте страницу панели управления Matchmaker.

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

  • имя матчмейкера — для вашего собственного удобства, напр. quickstart-dev ,

  • загрузите нашу JSON-конфигурацию простого примера.

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

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

Конфигурация приложения недействительна для профиля XYZ.
Docker-образ для '2024.01.30-16.23.00-UTC' не кэширован.

🌟 Обновитесь до тарифа Pay as You Go чтобы разблокировать мгновенные развёртывания с кэшированием.

  • Некэшированные образы размером 4 ГБ и более могут дольше развёртываться, что приведёт к Развертывания. Рассмотрите возможность оптимизации размера образа сервера (Unreal Engine / Unity).

  • Вы всё равно можете продолжить, хотя мы рекомендуем протестировать время развёртывания.

☑️ Если ошибок проверки не появилось, нажмите Создать и запустить и дождитесь завершения процесса. В результате будет запущен новый бесплатный кластер с вашим матчмейкером 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 игроками.

Правило задержек

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

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

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

Пример правила: маяки

маяки правило, настроенное с "difference": 100, "max_latency": 200 будет сопоставлять:

✅ Алиса и Боб могут быть сопоставлены:

  • Токио отбрасывается (>200 мс),

  • задержка для Чикаго в пределах абсолютной разницы 100 мс.

Город маяка
Матч
abs(A - B) [мс]
Алиса [мс]
Боб [мс]

Чикаго

✅

75.0

12.3

87.3

Лос-Анджелес

❌

113.2 ❌

145.6

32.4

Токио

н/д

н/д

233.2 ❌

253.2 ❌

❌ Алиса и Чарли никогда не будут сопоставлены:

  • нет маяков с задержкой < 200 мс для обоих игроков,

  • Алиса живет в Северной Америке — Иллинойс,

  • Чарли живет в Азии — Япония.

Город маяка
Матч
abs(A - B) [мс]
Алиса [мс]
Чарли [мс]

Чикаго

н/д

н/д

12.3

215.6 ❌

Лос-Анджелес

н/д

н/д

145.6

238.3 ❌

Токио

н/д

н/д

233.2 ❌

24.2

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

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

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

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

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

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

  • Размер соответствует одному из наших тарифных планов.

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

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

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

Чтобы протестировать ваш новый матчмейкер, вам понадобятся Swagger URL, API URL и Auth Token.

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

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

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

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

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

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

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

☑️ Предварительный просмотр вашего запроса:

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

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

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

    • правило player_count — это единственное правило, которое не требует каких-либо атрибутов в тикетах игроков.

☑️ Нажмите Выполнить и просмотрите ответ на ваш запрос тикета игрока:

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

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

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

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

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

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

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

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

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

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


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

  • Учетные записи Free Tier ограничены 1 развертыванием одновременно. Рассмотрите возможность обновления или остановите текущее развертывание, чтобы запустить новое.


Мой билет сразу переходит в CANCELLED.

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


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

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

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

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

Через несколько секунд после нахождения совпадения участники переходят к status:HOST_ASSIGNED что означает, что ваш развертывание уже готово, а ваш игровой сервер инициализируется.

Каждый игрок читает свой ticket_id и назначение и пытаются подключиться, используя FQDN (URL развертывания) и внешний порт. В этот момент ваш игровой сервер может все еще инициализироваться, поэтому игрокам нужно повторять попытку подключения несколько раз, пока не будет превышено обычное время инициализации сервера:

Чтобы подключение из PIE (редактора) во время разработки и тестирования нажмите клавишу тильды ~ и введите open {URL}:{port} и дождитесь, пока редактор загрузит карту.

Чтобы подключение из сборки игрового клиента (и в рабочей production-среде) попробуйте

Чтобы подключите ваш Unity Editor или игровой клиент к вашему облачному развертыванию, укажите:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Используйте GetEnvironmentVariable в C# или GetEnvironmentVariable в C++ чтобы получить значения переменных.

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

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

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

🏁 Продвинутый пример

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

🏁 Расширенный пример (полная конфигурация примера)

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

На основе Матчмейкинг, эта конфигурация демонстрирует Backfill с Группы.

🥛 Пример конфигурации backfill

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

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

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

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

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

Бэкфилл — это серверный билет, представляющий игроков, в данный момент подключённых к серверу. Это гарантирует, что вновь добавленные игроки будут соблюдать ваши правила подбора при сопоставлении с текущими игроками.

Визуализация сценариев бэкфилла

Шаги для успешного выполнения бэкфилла:

  1. Сервер должен создать по одному Backfill для каждой команды, которой не хватает игроков, используя значения из:

    • Реальные назначение данные, полученные из Внедряемые переменные (развёртывания).

    • Текущих подключённых игроков' билеты:

      • из Подробный обзор (матчмейкера), предыдущих бэкфиллов' assigned_ticket ответа или тестовых данных, изменённых для соответствия конкретным игрокам,

      • замените backfill_group_size значения на возможные размеры группы до доступной вместимости,

  2. Игровые клиенты создают новые билеты (членства) и включают backfill_group_size значения:

    • "1" если игрок подбирается в одиночку.

    • "2" если игрок является частью группы подбора с общим количеством участников 2x.

    • "new" если игроки включили возможность начинать новые игры в дополнение к присоединению к идущим играм.

  3. Игровые клиенты переходят к Подробный обзор и сопоставляют игроков с подходящим бэкфиллом.

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

🥛 Пример бэкфилла (демонстрация бэкфилла)
🥛 Пример назначения бэкфилла (демонстрация бэкфилла)

См. Управление местами Mirror и Управление местами FishNet для мониторинга подключений игроков.

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

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

⚔️ Пример соревновательной игры

Вы можете определить несколько команд, каждая с 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 с ожидания в очереди.

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

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