slidersПодробный обзор

Подробнее изучите концепции матчмейкера Edgegap без кода и настройте его под свои нужды.

✔️ Введение

Начните менее чем за 5 минут и бесплатно протестируйте все функции, без необходимости указывать кредитную карту.

Обновитесь, когда будете готовы к более мощному приватному (выделенному) кластеру. Нативная интеграция с Edgegap Развертывания обеспечивает лучший в классе пинг независимо от того, где находятся ваши игроки.

circle-info

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

С каждым Matchmaker связаны три ключевые концепции:

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

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

  • 🌐 Экземпляр сервиса - Работающий в реальном времени сервис подбора матчей, работающий 24/7 в кластере, использующий конфигурацию для объединения игроков и назначения развёртываний (серверов).

circle-check

▶️ Начать подбор матчей

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

Последовательность подбора матчей
  1. Аутентифицировать игрока - не позволяет пиратским копиям играть онлайн,

  2. Создать лобби - объединиться с друзьями и поделиться предпочтениями игрока/матча,

  3. Сгруппироваться - зарегистрировать ваше лобби как группу подбора матчей,

  4. Найти матч - подготовиться и начать поиск матча (нового или существующего),

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

  5. Подключиться и аутентифицироваться - попытка защищённого подключения к игровому серверу,

    1. Подтвердить личность - сервер проверяет личность игрового клиента с помощью токенов сторонних сервисов,

    2. Принять игрока или исключить игрока - сервер решает, можно ли игроку присоединиться.

Быстро начните - добавьте в свою игру наш стартовый пример подбора матчей:

Аутентификация

circle-check

Отдельных игроков можно идентифицировать по их ID билета, доступному на клиентах и сервере. При желании добавьте собственную аутентификацию или ограничения с помощью пользовательского прокси, используя Сервер к серверу API.

Сгруппироваться

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

circle-check
Диаграмма жизненного цикла группы

Лобби и группа

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

circle-check
Дизайн игры - Функция / Требование
Предматчевое лобби
Группа матчмейкера

приглашать друзей поиграть со мной

изменять мои предпочтения игрока/матча

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

хранить и управлять пользовательскими данными ключ-значение

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

показывать ход подбора матчей и находить матч

получать назначение команды для игрока/группы

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

Наш кроссплатформенный матчмейкер поддерживает все коммерческие и пользовательские сервисы лобби:

Сервис лобби (сторонний)
Unreal Engine
Unity
ПК
Консоли
VR/XR
Мобильные устройства

Пользовательское лобби (ваша компания)

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

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

circle-exclamation

Оптимизация пинга

Если Подробный обзор включает задержки правило все участники группы отправляют свои Пинг-маяки измерения в чтобы не сопоставлять игроков из удалённых регионов или с гораздо более высоким/низким пингом (задержкой).

Покинуть очередь

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

Участники группы (кроме владельца) могут удалить свои членства (покинуть группу) в любое время до Подробный обзор. Удаление членства после этого отменит подбор матчей для всей группы.

circle-info

После отмены подбора матчей участники автоматически удаляются из подбора матчей и уведомляются через статус членства status:CANCELLED в своём следующем ответе проверки статуса.

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

После того как матч найден, группу нельзя удалить (409 Conflict), и она будет удалена автоматически. Ваш сервер должен дать игрокам некоторое время (например, 60 с) на подключение, прежде чем считать, что игрок покинул игру. В таком случае ваш сервер может:

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

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

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

Найти матч

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

circle-check
circle-info

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

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

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

Как только мы найдём достаточно игроков, чтобы поместить их в одну команду с соблюдением вашего Правила, игроки будут уведомлены в ответе на своё членство с status:TEAM_FOUND.

Удаление членства на этом этапе приведёт к отмене всех членств группы, а все другие группы, назначенные в ту же команду, вернутся к status:SEARCHING .

Команды продолжают подбор матчей с другими командами, используя пересекающиеся значения в своих группах (или среднее значение в случае number_difference ), пока не будет собрано достаточно команд. Членства указывают на это ответом status:MATCH_FOUND , что означает, что ваше развёртывание запускается.

Матчмейкер стремится максимизировать заполненность матча и не перейдёт к MATCH_FOUND до тех пор, пока либо:

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

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

  3. или не истечёт заданное время жизни билета И достаточное количество команд сопоставлено с заданным минимальным размером команды.

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

circle-info

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

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

circle-check
circle-info

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

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

После того как игроки получают status:HOST_ASSIGNED они переходят к Подробный обзор.

Подключиться к серверу

Backfill матча

После завершения инициализации игрового сервера ваш сервер должен:

  • Запустить таймер выхода для каждого нового игрока. Мы рекомендуем показывать подключённым игрокам прогресс загрузки с помощью сцены/уровня загрузки — либо полноценной 3D-сцены, либо социального UI в стиле лобби, либо экрана загрузки с полосой прогресса.

  • Отслеживайте подключение новых игроков или выход существующих со временем:

    1. Новые игроки должны сообщить серверу ID билета для аутентификации и для сопоставления их подключения с матчмейкером Подробный обзор или assigned_ticket (если использован backfill).

    2. Создавайте новые backfill-запросы для неиспользованной вместимости игроков (вышедших) на протяжении всего срока жизни сервера.

    3. Обновляйте истёкшие backfill-запросы, которые удаляются после ticket_expiration_period.

  • Очищайте (удаляйте) любые оставшиеся backfill-запросы когда Развертывания:

Для Backfill можно использовать любой профиль, если предоставлены корректное назначение сервера и хотя бы один билет. См. Подбор игроков для минимального примера.

⚙️ Конфигурация

API матчмейкера генерируется из JSON-конфигурации, указанной при создании нового (или быстрого перезапуска) Matchmaker. Вы можете указать любое количество профилей с различными правилами и расширениями:

circle-check
circle-exclamation

Профили (очереди)

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

Каждый профиль матчмейкера использует Версию приложения как шаблон для запуска новых развёртываний (серверов).

circle-check

Правила

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

Каждая запись в профиле по пути .rules.initial представляет правило, где:

  • key — это строковое значение, чтобы назвать правило так, как вам удобно; например match_size , а

  • value — это объект, определяющий тип и атрибуты правила в соответствии с нашим стандартным набором правил.

circle-info

Все правила должны выполняться одновременно, чтобы инициировать назначение хоста и начать или найти развёртывание.

Операторы (тип правила)

player_count — это специальное правило, определяющее, сколько игроков должно совпасть, чтобы инициировать назначение.

circle-exclamation

Матчмейкер всегда стремится максимизировать заполненность матча, вплоть до заданного max_team_size :

  1. если достигнут максимальный размер команды, матч создаётся немедленно,

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

  3. незадолго до расширения (или истечения срока), если возможен частичный матч (≥ min и < max размер команды), этот матч будет создан со всеми игроками на одной и той же стадии расширения (при условии, что другие правила выполняются).

circle-check

Количество команд можно настроить так, чтобы формировать несколько сбалансированных команд для соревновательных игр:

  • атрибуты группы рассчитываются как среднее/пересечение атрибутов игроков группы,

  • атрибуты команды рассчитываются как среднее/пересечение атрибутов группы команды.

Предполагая фиксированный размер команды 4 игрока:

Примеры сценариев матча
circle-info

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

string_equality сопоставляет игроков с точно таким же строковым значением.

chevron-rightПример правила: selected_game_modehashtag

selected_game_mode правило будет сопоставлять игроков с учётом регистра:

Alice + Bob + Dave могут совпасть,

Alice + Erin или Charlie + Frank никогда не совпадут.

"Free For All"
"Capture The Flag"
"capture the flag"

Alice

Erin

Frank

Bob

Charlie

Dave

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

chevron-rightПример правила: elo_ratinghashtag

elo_rating правило выше с "max_difference": 50 изначально:

Alice + Bob могут совпасть, или Bob + Charlie могут совпасть,

Alice + Bob + Charlie никогда не совпадут.

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

chevron-rightПример правила: selected_maphashtag

selected_map правило выше с "overlap": 1 будет сопоставлять:

Alice + Bob + Charlie могут совпасть, или Alice + Bob + Dave могут совпасть,

Alice + Bob + Charlie + Dave никогда не совпадут.

Расширение правила

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

chevron-rightПример сценария: расширенияhashtag

Изначально нам требуется 1 команда, состоящая ровно из 4 игроков (возможно, разделённых на группы) с:

  • максимум 125 мс задержки относительно одного и того же (любого одного) beacon,

  • разницей задержки 125 мс или меньше между минимальным и максимальным значением для одного и того же beacon,

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

  • точно тот же (с учётом регистра) выбранный игровой режим,

  • как минимум один совпадающий выбор карты (с учётом регистра) среди игроков,

  • как минимум одно совпадающее значение размера backfill-группы среди игроков.

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

30 секунд:

  • 4 игроков

  • диапазон рейтинга навыка 150

  • макс. задержка 250 мс

60 секунд:

  • 4 игроков

  • диапазон рейтинга навыка 200

  • макс. задержка 250 мс

3 минуты (180 с):

  • 1–4 игрока

  • диапазон рейтинга навыка 200

  • любая задержка

chevron-rightТонкая настройка расширенийhashtag

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

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

  • Какова длительность моей игровой сессии?

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

  • Каковы мой пиковый CCU и мой низкий CCU?

    • Если разброс между низким и высоким значением велик (более 60%), вам может понадобиться отдельный профиль для периода спада, чтобы дольше ждать в каждом расширении и накапливать больше игроков.

  • Каково географическое распределение моих игроков?

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

  • Каково распределение рейтинга навыка моих игроков (по регионам)?

    • Распределение навыков обычно следует колоколу Гауссаarrow-up-right (нормальному распределению), поэтому с каждым стандартным отклонением от среднего вы находите всё меньше игроков, находящихся дальше от среднего. Игроки со средними значениями будут сопоставляться быстро, уже в первом расширении, но крайние значения — проблема.

    • Мы рекомендуем увеличивать величину допуска при каждом расширении, например 25 -> 50 -> 100, чтобы учитывать меньшее число игроков на краях распределения.

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

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

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

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

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

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

    • Свяжитесь с нами за дополнительными советами и приёмами, специально для вашего дизайна игры.

circle-info

Расширения любого атрибута правила перезапишут предыдущие значения этого атрибута.

📌 Внедрённые переменные

Вашему серверу может понадобиться знать данные о своих игроках. Атрибуты игроков, вычисленные значения матча и другие значения внедряются в ваше развёртывание вместе с обычными Приложения и версии.

Предпросмотр без форматирования 🏁 Дополнительные примеры переменных:

circle-info

Переменные окружения хранятся как JSON-строки, анализируйте их с помощью нашего SDK или пользовательского метода.

circle-check

🧵 Отслеживание игроков

Если ваши игроки сталкиваются с какими-либо проблемами, может быть полезно отследить их путь до логов сервера. Каждый Matchmaker развёртывание будет помечено назначенными ID билетов игроков чтобы вы могли легко Развертывания и находить Развертывания чтобы помочь вам устранить неполадки.

circle-check
circle-info

См. Развертывания чтобы узнать об устранении неполадок развёртывания.

👀 Аналитика

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

🌟 Обновите Matchmaker до тарифа Enterprisearrow-up-right чтобы открыть метрики и аналитику подбора матчей:

☁️ Хостинговый кластер

Matchmaker удобно размещается и управляется Edgegap 24/7 круглосуточно.

Выберите вариант хостинга, лучше всего подходящий для вашей цели:

Тарифы приватного кластера

Обновитесь до приватного кластера в один клик. Также возможно изменить тарифы приватного кластера после запуска, без простоя для игроков, с помощью ⏩ Скользящие обновления. Управляемые кластеры обеспечивают высокодоступный хостинг сервисов, поддерживаемый Edgegap, с круглосуточной живой поддержкой для игр, выпущенных в публичный релиз.

Требования к ресурсам для вашего экземпляра будут зависеть от факторов:

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

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

  • сложность конфигурации - правила пересечения и расширения особенно требовательны,

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

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

  • логика резервного повторного запроса клиента - повторные попытки с jittered backoff помогают распределить пиковые всплески трафика.

circle-exclamation

Ограничения скорости

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

Конечная точка API
Бесплатный тариф
Тариф для любителей
Студийный тариф
Корпоративный тариф

Общий лимит

100

200

750

2,000

Создать развертывание

5

10

30

30

Список маяков

10

20

75

200

Создать группу + Создать тикет + Создать групповой тикет

10

20

75

200

Читать членство + Читать группу + Читать тикет

10

120

450

1,300

Создать backfill

5

10

37

100

Ограничения скорости выражаются в совокупных запросах в секунду к указанному набору конечных точек API.

Если ваши игровые клиенты не повторяют попытки после получения ответа 429 Слишком много запросов вашим развертываниям может не хватать игроков которые перестают читать свои назначения из-за высокой нагрузки.

Нагрузочное тестирование

Матчмейкинг и назначения требуют использования CPU и памяти, что влечет за собой стоимость хостинга для каждого приватного матчмейкера. См. ресурсы и цены, связанные с каждым тарифом, на нашей странице ценarrow-up-right.

circle-check

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

Реалистичный сценарий
Нереалистичный шаблон трафика

✅ Игроки постепенно входят в матчмейкинг, увеличивая req/s в течение нескольких часов.

❌ Все игроки координируются и создают свои тикеты в одну и ту же секунду.

✅ Игроки ждут все больше времени между повторными попытками (например, 1с-5с-10с-10с).

❌ Все игроки повторяют попытку немедленно после получения 429 Слишком много запросов ответа.

✅ Большинство игроков получают свои назначения в течение короткого времени (10–60 с) и прекращают опрос.

❌ Все игроки продолжают опрашивать в течение заданного времени даже после получения назначения.

✅ Большинство игроков завершают свою игру (это занимает время) перед тем, как снова начать матчмейкинг.

❌ Все игроки немедленно заново запускают матчмейкинг сразу после получения назначения.

✅ Пиковый трафик сохраняется 6–8 часов в день, после чего в некоторых часовых поясах он снижается.

❌ Пиковый трафик сохраняется 24 часа в сутки, и все игроки играют днем и ночью.

Если матчмейкер испытывает высокую нагрузку:

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

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

⏩ Скользящие обновления

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

URL вашего матчмейкера и токен аутентификации всегда останутся прежними после перезапуска.

triangle-exclamation

⚠️ Перед выходом в продакшен

Мы рекомендуем заранее создать несколько копий вашего матчмейкера: green, blue и orange. Вы можете переключать, какой матчмейкер используется, по мере выпуска обновлений (blue/green strategyarrow-up-right).

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

Пример DevOps-окружения Blue/Green

🔃 Обновление клиента + сервера

Предварительные требования: В этом разделе предполагается, что вы завершили Подробный обзор.

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

  1. Подготовить новую версию серверного приложения v1.2.0-rc на Edgegap:

    1. запушить новый тег образа в ваш контейнерный реестр t1.2.0,

    2. создать новую версию приложения v1.2.0-rc,

  2. Проводить любые dev-тесты, развертывая новую версию приложенияarrow-up-right v1.2.0-rc:

    1. подключая Editor вашего игрового движка к предоставленному URL + внешнему порту,

  3. Обновить неиспользуемый матчмейкер blue чтобы он ссылался на ваш новый тег образа t1.2.0,

    1. включить кэширование для новой версии приложения v1.2.0-rc , включение кэша для этой версии гарантирует, что образ также будет кэширован для версии v-blue поскольку они ссылаются на один и тот же тег,

    2. дождитесь индикатора кэширования в версии v1.2.0-rc чтобы он достиг 🟢 green,

  4. Обновите ваш новый игровой клиент c2 чтобы использовать новую версию v-blue при создании тикетов:

    1. обновите базовый URL и токен авторизации в игровом клиенте,

  5. Проведите QA-тесты и финальные проверки вашего нового игрового клиента c2:

    1. если вы найдете и устраните какие-либо проблемы, повторите процесс с самого начала,

    2. подождите 3–7 дней, чтобы изменения DNS матчмейкера распространились среди ISP по всему миру после остановки матчмейкера (быстрый перезапуск не требует обновления DNS или периода ожидания),

  6. Выпустите обновление вашего нового игрового клиента c2 на платформах распространения игр,

  7. Дайте время новому игровому клиенту c2 распространиться на устройства игроков (обычно до 3–7 дней):

    1. следите за устаревшими игровыми клиентами c1 используя развертывание Развертывания,

  8. Очистите неиспользуемые ресурсы в вашем аккаунте Edgegap:

    1. удалите тег образа t1.0.0 чтобы освободить место в Container Registry,

    2. удалите тег образа t1.1.0 чтобы освободить место в Container Registry,

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

circle-check

⚡ Горячее исправление сервера

Предварительные требования: В этом разделе предполагается, что вы завершили Подробный обзор.

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

  1. Подготовить новую версию серверного приложения v1.2.0-rc на Edgegap:

    1. запушить новый тег образа в ваш контейнерный реестр t1.2.0,

    2. создать новую версию приложения v1.2.0-rc,

  2. Проводите тесты и проверки, развертывая новую версию приложенияarrow-up-right v1.2.0-rc:

    1. подключая Editor вашего игрового движка к предоставленному URL + внешнему порту,

    2. если вы найдете и устраните какие-либо проблемы, повторите процесс с самого начала,

    3. включить кэширование для новой версии приложения v1.2.0-rc , включение кэша для этой версии гарантирует, что образ также будет кэширован для версии v-green позднее, поскольку они будут ссылаться на один и тот же тег,

    4. дождитесь индикатора кэширования в версии v1.2.0-rc чтобы он достиг 🟢 green,

  3. Обновить версию v-green чтобы он ссылался на ваш новый тег образа t1.2.0,

    1. новые матчи автоматически будут инициировать назначение с обновленным тегом t1.2.0,

    2. следите за устаревшими игровыми клиентами c1 используя развертывание Развертывания,

  4. Очистка неиспользуемых ресурсов в вашем аккаунте Edgegap:

    1. удалите тег образа t1.1.0 чтобы освободить место в Container Registry.

📗 API

Клиенты и серверы могут вызывать API напрямую или с помощью SDK игрового движка, также см. Подбор игроков.

Сервер к серверу

Добавьте расширенные или настраиваемые элементы управления потоком матчмейкинга — реализуйте собственный прокси с помощью нашего Управляемые кластеры или любой облачной FaaS вычислительной платформы, чтобы достичь любого из следующего:

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

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

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

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

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

circle-check
circle-info

Игровые клиенты могут использовать ipify.orgarrow-up-right бесплатный сервис для определения своих публичных IP. VPN могут скрывать публичный IP-адрес.

Диаграмма активности матчмейкинга сервер-сервер

Обмен ресурсами между источниками (CORS)

Для webGL-игр, размещенных на сторонних платформах распространения (например, itch.ioarrow-up-right), отправка любых запросов к Matchmaker из игрового клиента может привести к обмену ресурсами между источникамиarrow-up-right нарушениям политики. Большинство современных веб-браузеров отправляют pre-flight запросarrow-up-right чтобы проверить, что бэкенд-сервис (Matchmaker) понимает и принимает связь от вашего игрового клиента.

Неудачная pre-flight проверка (по умолчанию из соображений безопасности) может привести к одной из нескольких возможных ошибок, связанных с CORSarrow-up-right, чаще всего отсутствует заголовок CORS 'Access-Control-Allow-Origin' .

Чтобы решить эту ошибку, добавьте allowed_cors_origin параметр в вашу конфигурацию, чтобы либо:

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

chevron-right🍀 Простой пример (пример с конкретными доменами)hashtag
  • или внести в белый список домен с wildcard (включая все поддомены):

chevron-right🍀 Простой пример (пример с wildcard-доменом)hashtag
circle-info

Для pre-flight запросов Matchmaker не требуются учетные данные, если домены настроены правильно.

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

Ваш успех — наш приоритет. Если вы хотите отправлять пользовательские запросы, попросить о недостающих критически важных функциях или поделиться любыми мыслями, пожалуйста, свяжитесь с нами в нашем Community Discordarrow-up-right.

chevron-rightПочему я получаю ошибки при попытке создать новый матчмейкер?hashtag
  • Пожалуйста, прочитайте текст ошибки: возможно, вы опечатались в идентификаторе, правиле или операторе. - Используйте JSONLintarrow-up-right для проверки формата JSON, возможно, вы пропустили запятую или скобку. - Обратитесь через наш Community Discordarrow-up-right за помощью, мы будем рады помочь. 🙏

chevron-rightПочему мой матчмейкер автоматически выключился через 3 часа?hashtag
  • Матчмейкеры на Free Tier предназначены для начальных тестов и автоматически выключаются через 3 часа. Чтобы продолжить тестирование, вы можете перезапустить ваш матчмейкерarrow-up-right.

  • Рассмотрите переход на платный тариф для неограниченного времени работы.

chevron-rightПочему я не могу запустить второе развертывание в своем аккаунте?hashtag
  • В Free Tier вы можете запускать только 1 одновременное развертывание.

  • Рассмотрите переход на платный тариф для неограниченного количества развертываний.

chevron-rightПочему я получаю назначение/развертывание в случайное время, игнорируя player_count?hashtag
chevron-rightМой тикет застрял в SEARCHING .hashtag
  • Пожалуйста, проверьте, что вы создали достаточно подходящих тикетов, соответствующих вашей конфигурации.

chevron-rightМой тикет застрял, переключаясь между MATCH_FOUND и TEAM_FOUND повторно.hashtag
  • Учетные записи Free Tier ограничены 1 развертыванием одновременно.

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

chevron-rightМой тикет сразу переходит в CANCELLED.hashtag
  • Срок действия вашего тикета истек. Создайте новый тикет или увеличьте период истечения в вашей конфигурации для целей тестирования.

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

chevron-rightМой матчмейкер показывает ошибку, что мне делать?hashtag

🔖 Журнал изменений

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

circle-info

Последняя версия матчмейкера — 3.2.2. Все примеры на этой странице актуальны. Следите за уведомлениями о прекращении поддержки вашей версии матчмейкера. Также см. ⏩ Скользящие обновления.

3.2.2 (18 мар. 2025)

🩹 Исправления ошибок:

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

circle-check
circle-exclamation

3.2.1 (24 нояб. 2025)

🩹 Исправления ошибок:

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

3.2.0 (31 окт. 2025)

🩹 Исправления ошибок:

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

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

✨ Улучшения и новые функции:

  • Представляем Подробный обзор функцию - управлять группами теперь легко и не требует сторонних решений!

    • Больше не нужно делиться сложными атрибутами тикета между участниками группы, вам нужен только Group ID.

    • Начинайте матчинг как группа, когда все ваши игроки отметят себя как готовые.

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

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

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

  • Тикеты (членства) теперь включают ваш ID матча — отслеживайте игроков и добавляйте UI-элементы, чтобы делиться никнеймами вашей команды или команд соперников, рейтингом навыка или другими свойствами, хранящимися у сторонних сервисов.

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

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

    • Если достигнут максимальный размер команды, матч создается немедленно.

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

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

circle-exclamation

3.1.0 (10 июня 2025)

🩹 Исправления ошибок:

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

✨ Улучшения и новые функции:

  • Еще больше оптимизаций для максимизации заполняемости матчей с правилом player_count. Тикеты теперь будут ждать до конца расширения (или истечения), если возможен только частичный матч (>min и <max размер команды).

    • Полные матчи (достигнут максимальный размер команды) создаются немедленно (без изменений).

  • Перейдите на Enterprise Подробный обзор чтобы разблокировать матчмейкинг Подробный обзор! Получайте представление о нагрузке и производительности матчмейкера — без кода и без конфигурации. Метрики на старте включают:

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

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

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

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

  • Улучшена Правила документация с более понятными примерами и визуализациями.

3.0.0 (20 мая 2025)

⚠️ Ломающие изменения:

  • Используйте мин./макс. размер команды для эффективного заполнения команд (заменяет расширения по числу игроков):

    • в вашей конфигурации player_count правило, замените team_size на min_team_size и max_team_size чтобы добиться matching типа "best effort", стремясь максимизировать заполнение матча,

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

    • backfills обходят player_count правило и всегда матчятся с 1 тикетом (без изменений).

  • Тикеты, групповые тикеты и backfills, у которых все задержки выше наибольшего max_latency в данном профиле, будут немедленно отклонены с 400 Bad Request ответом на запрос создания тикета вместо истечения:

    • применяется только если правило latency настроено,

    • чтобы обойти это поведение, создайте расширение с max_latency: 99999 (любое значение выше тайм-аута измерения задержки вашего клиента).

  • Внедренные переменные окружения содержащие данные тикета, теперь включают поле id (ID тикета), чтобы их было проще повторно использовать при создании Подробный обзор.

🩹 Исправления ошибок:

✨ Улучшения и новые функции:

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

  • До 200% более высокая скорость матчмейкинга благодаря оптимизациям параллелизма.

  • До 40% более высокая заполняемость матчей благодаря оптимизации алгоритма расширений.

  • Улучшена стабильность сервиса и увеличена скорость быстрого перезапуска.

circle-info

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

chevron-rightАрхив журнала изменений (v2.1.0 и ранее)hashtag

2.1.0 (24 фев. 2025)

⚠️ Ломающие изменения:

  • Разделена информация о профиле игры и стадии расширения в Подробный обзор:

    • MM_MATCH_PROFILE теперь будет включать только имя профиля так, как оно указано в конфигурации.

    • Введен MM_EXPANSION_STAGE который будет содержать стадию расширения в виде строки (например, "initial", "15", "30").

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

  • Назначения тикетов теперь включают Team ID при Подробный обзор. Team ID также включается в каждое поле данных тикета Подробный обзор.

  • Подробный обзор теперь возвращает 409 Conflict HTTP-код вместо 204 No Content чтобы показать, что тикет нельзя удалить, поскольку развертывание уже начинается. Чтобы заменить вышедших игроков, используйте Подробный обзор выдаваемый сервером после заранее определенного тайм-аута.

  • Подробный обзор параметр тела запроса attributes.deployment_request_id был перемещен в attributes.assignment.request_id.

  • Подробный обзор тело запроса теперь требует полных сведений о назначении в составе attributes параметра в дополнение к request_id.

🩹 Исправления ошибок:

  • Резолвенные значения правила intersection теперь Подробный обзор в переменной окружения MM_INTERSECTION .

  • Функция быстрого перезапуска теперь надежно заново генерирует конечные точки API и спецификацию openAPI при изменении конфигурации.

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

✨ Улучшения и новые функции:

  • Увеличены лимиты скорости и масштабируемость всех конечных точек API во всех тарифах матчмейкера.

  • При назначении игрока в Подробный обзор, ID нового тикета игрока будет добавлен в качестве тега к Развертывания.

  • Добавлена функция аутентификации Swagger UI, чтобы тестировать API напрямую в веб-интерфейсе без необходимости использовать postman.

  • Улучшены примеры openAPI, чтобы они более точно отражали реалистичные запросы и ответы.

  • Добавлена новая Подробный обзор предназначенная для целей разработки и отладки.

    • Позволяет выводить список всех текущих тикетов игроков в виде постраничного списка.

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

1.0.0 (9 дек. 2024)

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

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

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

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

  • Инструменты разработчика и Инструменты разработчика SDK для матчмейкинга:

    • Чтобы упростить интеграцию, мы теперь предлагаем Software Development Kits для самых популярных игровых движков.

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

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

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

  • Развертывания, созданные матчмейкером, теперь помечаются ID тикетов.

  • Теперь вы можете редактировать конфигурацию, пока матчмейкер работает. Это вызывает быстрое перезагружение конфигурации без необходимости полного цикла включения/выключения для вашего матчмейкера. Примечание: эта функция не рекомендуется для production-сред, поскольку она удаляет все текущие тикеты и временно делает API недоступным.

  • Исправлено Подробный обзор чтобы использовать правильные примитивные типы вместо массивов.

  • Исправлено Подробный обзор Значения JSON, которые ранее содержали экранированные символы.

0.2.3 (8 окт. 2024)

  • Исправлена ошибка, из-за которой некоторые заголовки не принимались матчмейкером, когда запросы выполнялись из приложения WebGL (политики CORS).

0.2.2 (3 окт. 2024)

  • Исправлена проблема с проверкой сертификата TLS/SSL, препятствовавшая запуску матчмейкера.

0.2.1 (30 сент. 2024)

  • Исправлена ошибка, из-за которой конечная точка beacons возвращала ошибку 500.

0.2.0 (25 сент. 2024)

  • Базовая аутентификация теперь обязательна для всех конечных точек.

  • Добавлена возможность настраивать число повторных попыток при сбое назначения на сервер.

  • Матчмейкинг на основе команд теперь является режимом по умолчанию для всех конфигураций матчмейкинга.

  • И application, и version теперь являются обязательными полями во всех профилях.

  • Добавлена новая конечная точка для мониторинга состояния матчмейкера.

  • Обновлен формат переменной окружения tickets в развертывании.

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

  • Debug API теперь доступен только при явном включении в конфигурации (в настоящее время он отключен для переработки).

  • The game_profile ключ в ответе GET ticket был заменен на profile.

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

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