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

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

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

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

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

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

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

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

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

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

Через несколько секунд после нахождения матча участники переходят к status:HOST_ASSIGNED указывая, что ваш развертывание теперь готово и ваш игровой сервер инициализируется.
Каждый игрок читает свой ticket_id и назначение и пытается подключиться, используя FQDN (URL развертывания) и Внешний порт. Ваш игровой сервер в это время может всё ещё инициализироваться, поэтому игрокам необходимо несколько раз повторять попытку подключения, пока не будет превышено обычное время инициализации сервера:
Чтобы подключиться из PIE (редактор) в процессе разработки и тестирования нажмите клавишу тильда ~ и введите open {URL}:{port} и дождитесь, пока редактор загрузит карту.
Чтобы подключиться из сборки игрового клиента (и в рабочей производственной среде) попробуйте
Unreal Engine ⚡ Набор интеграции:
установить с Fab Marketplace (бесплатно для личного использования),
импортировать простой пример Blueprint и настроить под свои потребности.
В случае неудачных подключений или черного экрана обратитесь к нашему руководству по устранению неполадок.
Чтобы подключите ваш Unity Editor или игровой клиент к вашему облачному развертыванию, введите:
Развёртывание URL указывающий на IP сервера, обычно в
NetworkManagerкомпоненте.Внешний порт сопоставляемый с внутренним прослушивающим портом сервера, обычно в компоненте Transport.
В случае таймаута подключения или других проблем обратитесь к нашему руководству по устранению неполадок.
Игрокам следует сохранять их идентификатор назначения постоянно между перезапусками игры, чтобы в случае падения игрового клиента они могли восстановить данные подключения и попытаться переподключиться.
См. Матчмейкинг и наши SDK с функцией автоматического переподключения и прочим.
☑️ Попробуйте подключиться с вашего игрового клиента к назначенному серверу.
Если вы испытываете высокую задержку, интеграция сетевого кода может быть настроена на моделирование сетевой задержки. Отключите VPN при тестировании для более реалистичных условий и получите деплой с низкой задержкой.
☑️ После того как вы убедитесь, что можете подключиться к вашему деплою без проблем и завершили тестирование, Остановите ваш деплой чтобы освободить ресурсы в вашем аккаунте для следующей сборки.
✅ Теперь вы можете перейти к следующему шагу.
5. Интеграция игры
Matchmaker интегрируется с:
Игровой клиент, чтобы управлять группами, членством, назначениями и тикетами,
Выделенный сервер, чтобы Подробный обзор после выхода игрока.
☑️ В Игровой клиент, мы рекомендуем предоставлять игрокам обновления статуса тикета через внутриигровой интерфейс для лучшего игрового опыта. См.:
Unity Инструменты разработчика от Edgegap:
импортируйте простой пример скрипта и настройте под свои нужды,
Unreal Engine Инструменты разработчика:
установить с Fab Marketplace (бесплатно для личного использования),
импортировать простой пример Blueprint и настроить под свои потребности.
☑️ В Игровой клиент, убедитесь, что вы обрабатываете повторяемые 429 Too Many Requests ошибки с экспоненциальной задержкой и повторной отправкой, давая matchmaker время восстановиться при резких всплесках трафика.
☑️ В Игровой клиент, убедитесь, что вы обрабатываете нерепортируемые ошибки:
404 Not Found- тикет был удалён,500 Internal Server Error- временной сбой сервиса.
☑️ В Игровой сервер, читайте предпочтения игроков и начальный контекст сервера:
Внедрённые переменные (Matchmaker) для получения исходных данных матчмейкинга игроков.
Внедрённые переменные (Версии приложений) для параметров версий, настроек и секретов.
Внедрённые переменные (Деплой) для информации о деплое, IP, местоположении и т. п.
☑️ После подключения игроков, Игровой сервер и игровые клиенты запускают сцену загрузки — 3D-сцену, лобби-подобный социальный интерфейс или экран загрузки с индикатором прогресса, чтобы показать, что инициализация идёт.
☑️ Убедитесь, что ваш деплой будет остановлен правильно после окончания матча.
🙌 Поздравляем, вы завершили интеграцию Matchmaking! Чтобы узнать больше, продолжайте чтение.
🏁 Продвинутый пример
Полнофункциональная конфигурация, использующая все возможности матчмейкинга, включая Профили (Очереди), Правила, и Подробный обзор может выглядеть так:
🎾 Пользовательское лобби
Пользовательские лобби (приватные лобби, песочницы) — очень популярный вариант для локального мультиплеера на одном диване и тестирования новых функций в играх до их релиза в основных режимах. Обычно требуют минимальных ограничений, но стремитесь обеспечить, чтобы игроки могли Подробный обзор.
Добавьте custom-lobby-example profile в ваш существующий matchmaker чтобы поддерживать пользовательские лобби.
🥛 Демонстрация Backfill
Опираясь на Матчмейкинг, эта конфигурация демонстрирует Backfill с Группы.
По желанию, у некоторых игр могут быть особые требования к подбору матчей, такие как:
позволять новым игрокам присоединяться к уже идущим играм (друзьям или «рандомам»),
замещать игроков, которые покинули игру (леверы) после запуска сервера, чтобы избежать перезапуска матча,
позволять зрителям присоединяться и наблюдать турниры или матчи друзей (киберспорт),
централизовать игроков на больших серверах для обеспечения большего социального взаимодействия (MMO).
Бэкфилл — это тикет, принадлежащий серверу и представляющий игроков, в настоящий момент подключённых к серверу. Это гарантирует, что недавно добавленные игроки будут соблюдать ваши правила подбора матчей при сочетании с текущими игроками.
Подробный обзор для замены сессий Seat/Match. Matchmaker поддерживает только сессию Default.

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

