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

При использовании matchmaking есть четыре (4) важных потока данных:
API Matchmaking используется игровыми клиентами для связи с Matchmaker:
для управления группами, назначения серверов и мониторинга,
для измерения пинга с помощью Пинг-маяки.
Развертывания API используется для развертывания, масштабирования и управления вашими выделенными серверами с помощью Matchmaker.
Транспорты Netcode используются для связи между игровыми клиентами и выделенными серверами.
Подробный обзор чтобы заменить или добавить игроков на уже запущенный сервер.
После релиза, ваш matchmaker должен будет работать 24/7 чтобы игроки по всему миру могли подключаться к серверам.
🍀 Простой пример
Начните с простого примера и проверьте базовый поток игрока в matchmaking:
создание экземпляра matchmaker в общем Подробный обзор,
определение правил и настроек в вашем matchmaker Подробный обзор,
проверка потока игрока и управление билетами с помощью 📗 API.
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 мс.
Чикаго
✅
75.0
12.3
87.3
Лос-Анджелес
❌
113.2 ❌
145.6
32.4
Токио
н/д
н/д
233.2 ❌
253.2 ❌
❌ Алиса и Чарли никогда не будут сопоставлены:
нет маяков с задержкой < 200 мс для обоих игроков,
Алиса живет в Северной Америке — Иллинойс,
Чарли живет в Азии — Япония.
Чикаго
н/д
н/д
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.
Токен авторизации — это уникальный секретный токен, используемый игровыми клиентами и игровым сервером для аутентификации.
Сотрудники Edgegap никогда не будут запрашивать ваши токены. Пересоздайте токен, если подозреваете нарушение безопасности.
Чтобы протестировать ваш новый 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— это единственное правило, которое не требует никаких атрибутов в билетах игроков.
☑️ Нажмите Выполнить и посмотрите ответ на ваш запрос билета игрока:
id— это ваш уникальный ID билета matchmaking; сохраните его, чтобы позже проверить тикет,profileподтверждая выбор Профили (очереди),group_id— это уникальный ID группы, присваиваемый каждому тикету; одиночный игрок представляется как группа из 1,team_id— это уникальный ID команды, выдаваемый каждому игроку один разКОМАНДА НАЙДЕНАдостигается статус,player_ip— это определенный публичный IP-адрес игрока, независимо от метода идентификации,назначениеустановлено вnullчтобы указать, что тикет не был сопоставлен или назначен на сервер,created_atпредоставляет информацию о том, когда был создан тикет игрока, для использования в игровом интерфейсе,статусуказывает текущий статус тикета; все тикеты начинаются вПОИСК.

☑️ Создайте второй тикет, нажав Выполнить еще раз, чтобы наши два игрока совпали и сервер был запущен.
☑️ Сверните 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-среде) попробуйте
Unreal Engine ⚡ Integration Kit:
установить из Fab Marketplace (бесплатно для личного использования),
импортировать простой пример blueprint и настроить под свои нужды.
В случае неудачного подключения или черного экрана обратитесь к нашему руководству по устранению неполадок.
Чтобы подключите ваш Unity Editor или игровой клиент к вашему облачному развертыванию, укажите:
Развертывание URL указывающий на IP-адрес сервера, обычно в
NetworkManagerкомпоненте.внешний порт сопоставленный с внутренним портом прослушивания сервера, обычно в компоненте Transport.
В случае тайм-аута подключения или других проблем обратитесь к нашему руководству по устранению неполадок.
Мы не просим игроков подтверждать матч, поскольку стремимся обеспечить как можно более короткое время до начала игры, высокий процент заполнения матчей и минимизировать уклонение от очереди и отмены матчей.
Игровые клиенты должны сохранять свой ID назначения в постоянном хранилище между перезапусками игры, чтобы в случае сбоя игрового клиента они могли получить данные подключения и попытаться переподключиться.
☑️ Попробуйте подключиться из вашего игрового клиента к назначенному серверу.
Если у вас высокая задержка, возможно, ваша интеграция netcode настроена на имитацию сетевой задержки. Отключите VPN при тестировании для более реалистичных условий и получите развертывание с низкой задержкой.
☑️ Как только вы убедитесь, что можете без проблем подключаться к своему развертыванию и завершите тестирование, Остановите ваше развертывание чтобы освободить ресурсы в вашей учетной записи для следующей сборки.
✅ Теперь можно перейти к следующему шагу.
Найдите спецификацию OpenAPI для тестирования по адресу {matchmaker-url}/swagger/v1/swagger.json.
5. Интеграция игры
Matchmaker интегрируется с:
Игровой клиент, чтобы управлять группами, участниками, назначениями и тикетами,
Выделенный сервер, чтобы Подробный обзор после выхода игрока.
☑️ В Игровой клиент, мы рекомендуем предоставлять игрокам обновления статуса тикета через внутриигровой интерфейс для наилучшего опыта. См.:
Unreal Engine Инструменты разработчика:
прочитать документацию от Betide Studios,
установить из Fab Marketplace (бесплатно для личного использования),
импортировать простой пример blueprint (сопоставление игроков) и настроить под свои нужды.
☑️ В Игровой клиент, убедитесь, что вы обрабатываете повторяемые 429 Слишком много запросов ошибки с экспоненциальной задержкой повторных попыток, давая matchmaker время восстановиться во время резких всплесков трафика.
☑️ В Игровой клиент, убедитесь, что вы обрабатываете невосстановимые ошибки:
404 Not Found- тикет был удален,500 Internal Server Error- временный сбой сервиса.
☑️ В Игровой сервер, считывать предпочтения игрока и начальный контекст сервера:
Внедренные переменные (Matchmaker) чтобы получить начальные данные matchmaking игроков.
Внедренные переменные (версии приложения) для параметров версии, настроек и секретов.
Внедренные переменные (развертывание) для информации о развертывании, IP, местоположении и т. д...
Используйте GetEnvironmentVariable в C# или GetEnvironmentVariable в C++ чтобы получить значения переменных.
☑️ Когда игроки подключатся, Игровой сервер и игровые клиенты запустите сцену загрузки — 3D-сцену, социальный интерфейс в стиле лобби или экран загрузки с полосой прогресса, чтобы показать, что инициализация идет.
☑️ Убедитесь, что ваше развертывание будет остановлено корректно после завершения матча.
🙌 Поздравляем, вы завершили интеграцию Matchmaking! Чтобы узнать больше, продолжайте читать.
🏁 Продвинутый пример
Полноценная конфигурация, использующая все возможности matchmaking, включая Профили (очереди), Правилаи Подробный обзор может выглядеть так:
🥛 Демонстрация Backfill
Основано на Подбор игроков, эта конфигурация демонстрирует Backfill с Группы.
При необходимости у некоторых игр могут быть особые требования к подбору игроков, например:
позволять новым игрокам присоединяться к уже идущим играм (друзья или «рандомы»),
заменять игроков, покидающих игру (ливеров) после запуска сервера, чтобы не перезапускать матч,
позволять зрителям присоединяться и наблюдать за турниром или матчами друзей (киберспорт),
собирать игроков на более крупных серверах, чтобы обеспечить больше социальных взаимодействий (MMO).
Backfill — это серверный тикет, представляющий игроков, которые сейчас подключены к серверу. Это гарантирует, что вновь добавленные игроки будут соблюдать ваши правила подбора при сопоставлении с текущими игроками.
Подробный обзор для замены сессий Seat/Match. Matchmaker поддерживает только сессию Default.

Backfill игнорируют player_count правило и всегда сопоставляют ровно одну группу. backfill_group_size управляет вместимостью команды по стратегии round-robin, равномерно заполняя команды контролируемым образом.
Чтобы успешно выполнить backfill, нужно:
Сервер создаёт один Backfill для каждой команды, которой не хватает игроков, используя значения из:
Реальные
назначениеданные, полученные из Внедрённые переменные (развёртывания).Текущих подключённых игроков'
тикеты:из Подробный обзор (matchmaker), предыдущих backfill'
assigned_ticketответа или тестовых данных, изменённых для соответствия конкретным игрокам,замените
backfill_group_sizeзначения на возможные размеры групп до доступной вместимости,
Игровые клиенты создают новые тикеты (участия) и включают
backfill_group_sizeзначения:"1"если игрок подбирается в матч в одиночку."2"если игрок является частью группы подбора с 2x участниками всего."new"если игроки разрешили запуск новых игр в дополнение к присоединению к уже идущим играм.
Игровые клиенты переходят к Подробный обзор и сопоставляют игроков с соответствующим backfill.
Если группа, пополненная через backfill, не полностью заполнила команду, сервер может повторить этот процесс с тикетами новых игроков, добавленных через backfill, чтобы добавить ещё игроков и достичь нужного размера команды.
Backfill игнорируют правила размера команды и всегда сопоставляют 1× backfill с 1× группой. Чтобы сопоставлять только с backfill и отключить подбор с другими игроками в очереди, установите min_team_size: 999999 .
См. Управление местами 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), чтобы получить точный контроль над распределением навыка в матчах,
дольше ждите перед ослаблением требований к задержке из-за меньшего количества игроков.
Использование нескольких профилей для разделения казуальных режимов, соревновательных режимов и игроков высшего уровня challengers позволяет отдельно настраивать правила и расширения для каждого типа игроков.
🤝 Кооперативные игры
Кооперативные игры требуют, чтобы игроки работали вместе как команда ради общей цели или против ИИ-соперника. Объединяйте игроков со схожими предпочтениями и стилем игры. Заменяйте вышедших игроков и улучшайте Пинг-маяки чтобы обеспечить отзывчивый игровой опыт.
При количестве команд 1 и максимальном размере команды 4, требуйте до 4 игроков на матч.
Определите несколько Профили (очереди) для правил и настроек, специфичных для режимов игры:
начинайте минимум с 4 игроков, чтобы удерживать игроков в очереди и максимизировать заполнение матча,
ограничьте задержку matchmaking чтобы не сопоставлять далеко находящихся игроков,
позвольте игрокам выбирать определенную сложность игры, чтобы она подходила уровню навыка каждого,
позвольте игрокам указывать предпочтения по карте, чтобы найти карту, подходящую всем,
ограничьте разницу в уровнях игроков, чтобы требовать схожую степень прогресса в игре,
укажите размер группы для backfill, чтобы заменять вышедших игроков, не превышая емкость сервера,
используйте флаги модерации, чтобы отделять игроков с низкой кармой и читеров от общей аудитории,
Подробный обзор для заранее собранных групп и заполнения команд без превышения емкости сервера,
выделяйте больше CPU или памяти, используя разные Приложения и версии для других профилей.
Начните с идеальных условий и расширяйте ограничения чтобы обеспечить быстрый подбор:
со временем ослабляйте ограничения по задержке, чтобы находить больше игроков,
увеличьте допустимую разницу уровней игроков, чтобы находить больше игроков,
уменьшите минимальный размер команды, чтобы требовалось меньше игроков и игра начиналась раньше,
сервер может заполнить пустые слоты ИИ-напарниками,
или Подробный обзор чтобы добавить игроков позже,
установите минимальный размер команды 1, чтобы запустить игру в одиночку после 150 с ожидания в очереди.
🎈 Социальные игры
Социальные игры сосредоточены на построении связей и отношений между игроками через сотрудничество, общение и общий опыт. Поддерживайте большое число игроков, максимизируйте заполнение матча и учитывайте предпочтения игроков и игровые привычки. Заменяйте вышедших игроков и обеспечьте высокий Пинг-маяки чтобы обеспечить отзывчивый игровой опыт.
При количестве команд 1 (free for all) и максимальном размере команды 50, требуйте до 50 игроков на матч.
Определите Профили (очереди) для правил и настроек, специфичных для режимов игры:
ограничьте задержку matchmaking чтобы не сопоставлять далеко находящихся игроков,
позвольте игрокам указывать предпочтения по режиму игры и находить режим, подходящий всем,
укажите размер группы для backfill, чтобы заменять вышедших игроков, не превышая емкость сервера,
используйте флаги модерации, чтобы отделять игроков с низкой кармой и читеров от общей аудитории,
Подробный обзор для заранее собранных лобби или заполнения команд без превышения емкости сервера,
выделяйте больше CPU или памяти, используя разные Приложения и версии для других профилей.
Начните с идеальных условий и расширяйте ограничения чтобы обеспечить быстрый подбор:
со временем ослабляйте ограничения по задержке, чтобы находить больше игроков,
постепенно уменьшайте минимальный размер команды, чтобы требовалось меньше игроков и игра начиналась раньше,
сервер может заполнить пустые слоты ИИ-игроками,
или Подробный обзор чтобы добавить игроков позже,
установите минимальный размер команды 1, чтобы запустить игру в одиночку после 150 с ожидания в очереди.
Последнее обновление
Это было полезно?

