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

Подбор игроков

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Архитектура Matchmaking

Это руководство будет сосредоточено на API Matchmaking и API Backfill.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

🍀 Simple Example (минимальная рекомендуемая конфигурация):

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

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

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

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

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

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

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

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

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

  • 🔥 мажорные версии содержат несовместимые изменения и требуют проверки интеграции,

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

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

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

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

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

Ядро нашей логики matchmaking настраивается в Профили (очереди). Каждый профиль — это полностью изолированная очередь matchmaking, указывающая на Приложения и версии с предопределенным количеством требуемых ресурсов 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. Проверьте сведения об экземпляре

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

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

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

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

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

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

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

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

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

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

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

4. Проверьте API тикетов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Моя заявка застряла в ПОИСК .

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


Моя заявка застряла, переключаясь между MATCH_FOUND и КОМАНДА НАЙДЕНА многократно.

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


Моя заявка сразу переходит в ОТМЕНЕНА.

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


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

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

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

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

Через несколько секунд после нахождения совпадения участники переходят к 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 Слишком много запросов ошибки с экспоненциальной задержкой повторных попыток, давая matchmaker время восстановиться во время резких всплесков трафика.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Визуализация сценариев Backfill

Чтобы успешно выполнить backfill, нужно:

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

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

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

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

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

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

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

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

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

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

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

🥛 Пример Backfill (демонстрация Backfill)
🥛 Пример назначения Backfill (демонстрация Backfill)

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

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

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

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

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

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

FPS 5 на 5

2

5

10

MOBA 5 на 5

2

5

10

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

20

3

60

10 игроков free for all

1

10

10

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

🤝 Пример кооперативной игры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

🎈 Пример социальной игры

При количестве команд 1 (free for all) и максимальном размере команды 50, требуйте до 50 игроков на матч.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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