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

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

Узнайте подробнее о no-code концепциях матчмейкера Edgegap и настройте их под свои нужды.

Если вам нужна помощь, свяжитесь с нами через Discord. Для поддержки по играм в реальном времени см. нашу систему тикетов.

✔️ Введение

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

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

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

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

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

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

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

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

Начните менее чем за 5 минут и бесплатно протестируйте все функции — кредитная карта не требуется.

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

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

Для каждого Matchmaker есть три основных понятия:

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

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

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

▶️ Начать матчмейкинг

Быстро начните — добавьте наш стартовый SDK-образец в вашу игру:

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

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

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

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

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

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

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

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

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

Аутентифицировать

Все запросы должны отправлять Authorization HTTP-заголовок с вашим секретом Auth Token:

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

Объединиться в группу

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

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

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

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

Дизайн игры — функция / требование
Предматчевое лобби
Группа матчмейкера

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

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

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

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

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

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

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

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

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

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

Лобби Steamworks (Valve Corporation)

Группа Nakama (Heroic Labs)

Лобби Playfab (Microsoft)

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

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

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

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

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

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

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

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

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

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

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

Если ваш сервер помечает игрока как покинувшего, вы можете:

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

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

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

Найти матч

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Матч для заполнения

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

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

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

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

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

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

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

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

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

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

    3. Обновляйте просроченные Backfill, которые удаляются после ticket_expiration_period.

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

    • Unity - OnApplicationQuit callback или пользовательский callback завершения игры,

    • Unreal Engine - OnWorldDestroyed , PreExit , или пользовательский callback завершения игры.

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

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

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

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

🍀 Простой пример (минимальная рекомендуемая конфигурация)
🏁 Расширенный пример (полная конфигурация примера)
🥛 Пример конфигурации Backfill
⚔️ Пример соревновательной игры
🤝 Пример кооперативной игры
🎈 Пример социальной игры
Конфигурация приложения недействительна для профиля XYZ.
Docker-образ для '2024.01.30-16.23.00-UTC' не кэширован.

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

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

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

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

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

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

Правила

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры сценариев матчей

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

string_equality подбирает игроков с точно одинаковым строковым значением.

Пример правила: selected_game_mode

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 подбирает игроков, если абсолютная числовая разница между ними находится в допустимых пределах.

Пример правила: elo_rating

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

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

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

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

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

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

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

маяки правило, настроенное с "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

Некоторые игроки с высоким пингом ко всем маякам из-за провайдера проблем или медленного соединения (например, беспроводного/мобильного) могут вызывать лаги и ухудшать игровой опыт других. Чтобы смягчить эту проблему:

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

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

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

    • это может отрицательно повлиять на опыт игры товарищей по команде и соперников.

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

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

Пример правила: selected_map

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

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

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

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

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

Пример сценария: расширения

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

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

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

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

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

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

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

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

30 секунд:

  • 4 игроков

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

  • Максимальная задержка 250 мс

60 секунд:

  • 4 игроков

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

  • Максимальная задержка 250 мс

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

  • 1–4 игрока

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

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

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

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

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

Предпросмотр без форматирования 🏁 Переменные расширенного примера:

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

🧵 Трассировка игроков

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

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

👀 Аналитика

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

🌟 Обновите Matchmaker до уровня Enterprise чтобы открыть метрики и аналитику подбора игр:

☁️ Кластер хостинга

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

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

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

    • автоматически отключается через 3 часа, для продолжения тестирования требуется перезапуск.

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

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

Уровни частного кластера

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

Уровень
Уровень для любителей
Студийный уровень
Корпоративный уровень

Лучше всего подходит для

энтузиастов, разработчиков-одиночек

коммерческих релизов

запусков с высоким трафиком

Ресурсы

1 vCPU + 2 ГБ ОЗУ

6 vCPU + 12 ГБ ОЗУ

18 vCPU + 48 ГБ ОЗУ

Отказоустойчивость

1 виртуальный узел

3 виртуальных узла

3 виртуальных узла

Ограничение скорости (запросов/с)

200

750

2,000

Цена, в час

$0.0312

$0.146

$0.548

Цена, за 30 дней (непрерывное использование)

$22.464

$105.12

$394.56

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

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

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

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

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

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

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

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

Наши кластеры используют облачные машины с процессорами AMD/Intel с тактовой частотой 2,4 - 3,2 ГГц.

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

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

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

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

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

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

Пример среды DevOps Blue/Green

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

Предварительные требования: Этот раздел предполагает, что вы уже выполнили Подробный обзор.

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

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

    1. отправить новый image tag в ваш реестр контейнеров t1.2.0,

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

  2. Выполните любые тесты разработки, развернув новую версию приложения v1.2.0-rc:

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

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

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

    2. дождитесь индикатора кеширования в версии v1.2.0-rc достигнет 🟢 зелёного,

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

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

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

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

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

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

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

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

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

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

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

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

⚡ Срочный серверный патч

Предварительные требования: Этот раздел предполагает, что вы уже выполнили Подробный обзор.

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

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

    1. отправить новый image tag в ваш реестр контейнеров t1.2.0,

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

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

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

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

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

    4. дождитесь индикатора кеширования в версии v1.2.0-rc достигнет 🟢 зелёного,

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

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

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

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

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

📗 API

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

Unity/Android — рассмотрите возможность использования подстановки в сырой строке чтобы предотвратить удаление кода жестко заданных JSON-файлов.

Импортировать спецификацию API в Веб-клиент Scalar API или Swagger Editor для изучения деталей.

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

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

конечная точка API
Бесплатный уровень
Уровень Hobbyist
Уровень Studio
Уровень Enterprise

Общий лимит

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.

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

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

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

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

✅ Игроки постепенно присоединяются к игре, увеличивая число запросов в секунду в течение нескольких часов.

❌ Все игроки скоординированно обращаются к API в одну и ту же секунду.

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

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

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

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

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

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

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

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

Поведение под нагрузкой

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

  • если процессор троттлит, подбор игр может замедлиться,

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

Межсайтовый обмен ресурсами (CORS)

Для игр WebGL, размещённых на сторонних платформах распространения (например, itch.io), отправка любых запросов к Matchmaker из клиента игры может привести к межсайтовому обмену ресурсами нарушению политики. Большинство современных веб-браузеров отправляют предварительный запрос чтобы проверить, что серверная служба (Matchmaker) понимает и принимает связь от вашего клиента игры.

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

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

  • добавить в белый список точные домены хостинга вашего клиента:

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

🍀 Простой пример (пример с wildcard-доменом)

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

Сервер-сервер

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

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

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

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

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

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

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

Диаграмма активности Server-to-Server Matchmaking

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

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

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

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

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

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

Почему я получаю ошибки при попытке создать новый matchmaker?
  • Пожалуйста, прочитайте ошибку — возможно, вы неправильно написали идентификатор, правило или оператор. - Используйте JSONLint чтобы проверить форматирование JSON; возможно, вы пропустили запятую или скобку. - Обратитесь через наш Community Discord за помощью, мы будем рады помочь. 🙏

Почему мой matchmaker автоматически отключился через 3 часа?
  • Matchmaker'ы на бесплатном уровне предназначены для первоначальных тестов и автоматически отключаются через 3 часа. Чтобы продолжить тестирование, вы можете перезапустить ваш matchmaker.

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

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

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

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

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

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

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

Моя заявка сразу переходит в ОТМЕНЕНА.
  • Срок действия вашей заявки истёк. Создайте новую заявку или увеличьте период истечения в вашей конфигурации для тестирования.

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

В моём matchmaker отображается ошибка, что мне делать?
  • Если это экземпляр для разработки или тестирования, сначала попробуйте перезапустить ваш matchmaker. - Пожалуйста, сообщайте о любых проблемах через наш Community Discord.

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

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

Семантическое версионирование

Наши инструменты для разработчиков и управляемые сервисы используют официальное Семантическое версионирование, что указывает, какие обновления ✅ безопасны (minor, patch), а какие могут содержать ⚠️ несовместимые изменения (major).

После выпуска версия никогда не будет изменена.

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

Последняя версия matchmaker — 3.2.5. Все примеры на этой странице актуальны.

Следите за обновлениями и объявлениями. См. также ⏩ Скользящие обновления.

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

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