> For the complete documentation index, see [llms.txt](https://docs.edgegap.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.edgegap.com/ru/learn/orkestraciya/deployments.md).

# Развертывания

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

## 🗺️ Оркестрация

Запускайте новые серверы за считанные секунды, чтобы соответствовать требованиям по емкости, используя наш облачно-нативный подход к периферийным вычислениям. Мы относимся к серверам как к [скоту, а не питомцам](https://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/) — полностью заменяя неисправные экземпляры вместо того, чтобы вручную возиться с каждым из них.

{% hint style="info" %}
Ваш выбор оркестрации **повлияет на стоимость DevOps, стоимость серверов и масштабируемость**.
{% endhint %}

{% hint style="success" %}
[Свяжитесь с нами в Discord](https://discord.gg/MmJf8fWjnt) чтобы узнать о гибридных вариантах оркестрации и оптимизации стоимости хостинга.
{% endhint %}

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

### Привязка к матчу

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

Сессии обычно автоматизируются через [Подбор игроков](/ru/unity/podbor-igrokov.md) сервис, который развертывает серверы точно в срок по строгим правилам и, при необходимости, позволяет заполнять уже идущие серверы для [повышения коэффициента заполнения матчей](https://edgegap.com/blog/how-session-fill-rate-affects-your-multiplayer-hosting-costs).

👍 **Преимущества**

* Лучшая экономическая эффективность — масштабирование в реальном времени в зависимости от спроса игроков из минуты в минуту.
* Минимальная стоимость DevOps благодаря хостингу без привязки к региону: Edgegap автоматизирует 99% задач.
* Минимальный пинг благодаря более чем 615 площадкам в публичной облачной инфраструктуре Edgegap.
* Самое быстрое масштабирование вверх (burstability) в случае неожиданного всплеска трафика.
* Высочайший стандарт безопасности и предотвращения читерства игроков (авторитет сервера).
* Минимальное влияние неожиданного сбоя сервера на игроков — затрагивается только один матч.

👎 **Недостатки**

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

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

* Игры, чувствительные к задержке, — **когда оптимизация netcode не может компенсировать высокий пинг:**
  * Шутеры от первого лица, файтинги, VR и XR (виртуальная и расширенная реальность), …
* Игры с **верхним пределом длительности матча по замыслу**,
  * Королевская битва, PvPvE[^1]кооперативные шутеры, MOBA, спортивные игры, ARPG и Dungeon Crawler, …

{% hint style="info" %}
Edgegap автоматически масштабирует все 615+ серверных локаций вверх/вниз в зависимости от активности игроков в каждом регионе. Готовьтесь к успеху — без усилий [масштабируйтесь до 14 миллионов одновременных пользователей за 60 минут](https://edgegap.com/resources/performance-benchmark).
{% endhint %}

### Региональный резерв

Постоянный мир и социальная MMO-игра **срок жизни сервера часто превышает отдельные игровые сессии игроков**.

Сессии обычно назначаются через [Server Browser](/ru/learn/server-browser.md) в зависимости от предпочтений игроков (автоматически по региону или через пользовательский поиск), с предварительным горизонтальным масштабированием развертываний на основе региональной емкости.

👍 **Преимущества**

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

👎 **Недостатки**

* Более высокая стоимость хостинга — каждому региону требуется один или несколько простаивающих резервных серверов (burst capacity).
* Более высокая стоимость DevOps — масштабирование, операции и обслуживание дублируются для каждого региона.
* В регионах с меньшей базой игроков наблюдается высокий пинг из-за подключения к серверам, находящимся далеко.

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

* Постоянные миры с пользовательским контентом, хранящимся на сервере даже когда игроки офлайн.
  * MMO, песочницы с постройкой базы или размещением объектов, extraction-шутеры, ...
* игры, терпимые к задержке, — **когда не требуется физика в реальном времени с авторитетом сервера**:
  * мобильные игры, кооперативные игры, TCG/CCG, пошаговые стратегии, …
* Асинхронный мультиплеер, **в котором сбои сервера оказывают минимальное влияние на опыт игрока:**
  * гонка с призраками, грабёж вражеской базы, игры на строительство/фермерство на основе таймера, …
* приложения с тяжелым процессом инициализации — когда подготовка серверов занимает минуты.

### Peer-to-Peer

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

Связанные темы: listen-серверы, авторитет игрока-хоста, пробивка NAT.

👍 **Преимущества**

* Минимальная стоимость хостинга, требуются только Relay-серверы для решения проблемы пробивки NAT.
* Минимальная стоимость DevOps — обслуживание требуется только для клиентских сборок и каналов распространения.
* Минимальное влияние неожиданного сбоя сервера на игроков — затрагивается только один матч.
* Легко реализовать и быстро создать прототип, без необходимости какой-либо backend-разработки.

👎 **Недостатки**

* Увеличенные усилия на разработку peer-to-peer netcode, требующие навыков параллельного программирования.
* Худшие времена пинга и наибольшая чувствительность к неблагоприятным сетевым условиям (например, мобильному интернету).
* Самая слабая безопасность, уязвимость к атакам man-in-the-middle и угону сессии.
* Риск потери сессий, когда хост уходит, если вы не реализуете собственную миграцию хоста.

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

* Кооперативные и казуальные игры — **когда читерство не лишает удовольствия и не ломает игру**,
  * Детские игры, игры на исследование, приключения, …

{% hint style="success" %}
См. наши [Распределенные Relay-серверы](https://docs.edgegap.com/docs/distributed-relay-manager) для сервиса, обеспечивающего peer-to-peer с лучшей в классе задержкой и безопасностью.
{% endhint %}

## 📍 Размещение серверов

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

{% hint style="info" %}
Ваша стратегия размещения серверов **повлияет на опыт игроков, удержание и отзывы о вашей игре**.
{% endhint %}

{% hint style="success" %}
**Edgegap разворачивает в** [**наилучшей возможной локации**](#server-score) **с доступной емкостью**, для быстрых матчей с низкой задержкой.
{% endhint %}

<figure><img src="/files/858cb6ac8ab6abcb6ec220e536e81a245d990313" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
См. [#deployment-balance-points](#deployment-balance-points "mention") на **анализировать размещение серверов в реальном времени**, в масштабе.
{% endhint %}

### Оценка сервера

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

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

{% hint style="success" %}
Наш [матчмейкер](/ru/learn/podbor-igrokov.md) по умолчанию использует **стратегию Server Score, чтобы обеспечить наилучший возможный опыт**. Чтобы использовать эту стратегию с [API развертывания](https://docs.edgegap.com/api/#tag/Deployments), укажите публичные IP-адреса игроков или геокоординаты в запросе на развертывание.
{% endhint %}

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

<figure><img src="/files/71d71e1cd05e3a8e6774e7d8dc2ebcfef4938539" alt=""><figcaption></figcaption></figure>

**Несправедливое размещение** — неравномерный пинг, один игрок в невыгодном положении:

<figure><img src="/files/1d5cb3d8cce45be102251d41bec805810cc42828" alt=""><figcaption></figcaption></figure>

**Пример хорошего размещения** — отзывчивый и справедливый пинг для всех игроков:

<figure><img src="/files/12b2ecc6a6c2717290dd9b743e67389259752113" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Эта стратегия **особенно эффективна для хостинга группы игроков, находящихся далеко друг от друга** (Северная Америка против Европы или западное побережье против восточного), что часто бывает с заранее созданными лобби.
{% endhint %}

### Геолокация

В качестве альтернативы, **укажите целевые координаты широты и долготы или публичный IP-адрес ping-маяка в предпочтительном регионе**. Этот подход требует дополнительной реализации геопоиска на стороне клиента и полностью зависит от решения разработчика.

{% hint style="warning" %}
Эта стратегия не рекомендуется для [#match-bound](#match-bound "mention") оркестрации, за исключением приложений со строгими нормативными требованиями к межрегиональной передаче данных, или когда IP игрока недоступен.
{% endhint %}

{% hint style="success" %}
В качестве альтернативы, позвольте игрокам **выбрать постоянный (всегда онлайн) сервер** из списка с [Server Browser](/ru/learn/server-browser.md).
{% endhint %}

### Ограничение по региону

Некоторые концепции или аудитории не предназначены для выхода в соседние регионы по соображениям соответствия требованиям, техническим или операционным причинам. Рассмотрите [Server Browser](/ru/learn/server-browser.md) с [политиками регионального масштабирования](/ru/learn/server-browser.md#automated-scaling).

{% hint style="warning" %}
Эта стратегия не рекомендуется для [#match-bound](#match-bound "mention") оркестрации, за исключением приложений со строгими нормативными требованиями к межрегиональной передаче данных, или когда IP игрока недоступен.
{% endhint %}

## 🟢 Качество соединения

Некоторые игры (и некоторые игроки) более чувствительны к задержке или лагам, чем другие. Хотя отчеты игроков — отличный индикатор инцидентов или регрессий на масштабе, **игрокам может не хватать глубокого понимания сетевых концепций** и они быстро перекладывают вину на студии, netcode или серверы.

Первопричина некоторых проблем может быть скрыта от игроков, поэтому сотрудничество студии и хостинг-провайдера может иметь решающее значение. **Приоритет Edgegap — всегда предоставлять наилучший возможный сервис.**

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

{% hint style="info" %}
Если вам нужна помощь, [свяжитесь с нами через Discord](https://discord.gg/MmJf8fWjnt). Для поддержки по играм в реальном времени см. нашу [систему тикетов](https://edgegap.atlassian.net/servicedesk/customer/portal/3).
{% endhint %}

#### Низкая задержка

Задержка игрока — это совокупность задержек при передаче данных между:

* **физическими устройствами —** физическим сигналом, проходящим через [топологию интернет-сети](https://en.wikipedia.org/wiki/Internet#Routing),
* **хостом и хостом** — возникающая из-за мер протокола, транспортировки и безопасности,
* **процессом и процессом** — возникающая из-за (расп)аковки и обработки данных в клиенте/сервере.

Edgegap снижает физическую задержку, размещая серверы ближе к вашим игрокам для более быстрых ответов и меньшего числа сетевых переходов. Имея локации у 17 облачных и bare metal-провайдеров, вы получаете **пинг лучшего в классе для игроков в любой точке мира**.

Покрытие серверов и интернета по всему миру (не только у Edgegap) ограничено из-за таких факторов, как:

* **доступность инфраструктуры** — качество интернет-соединения в данном регионе может быть недостаточным,
* **природные факторы** — очень сложные серверные стойки требуют в основном стабильной среды.

#### Высокая доступность

Доступность серверов в различных локациях по всему миру будет меняться со временем, несколько раз в течение дня. Edgegap автоматически **масштабирует вверх/вниз** локации **по требованию**, учитывая:

* **всплеск трафика** — развертывания, выполненные в течение 15-минутного периода,
* **требования к vCPU** — больше vCPU на развертывание увеличивает общий спрос на конкретную локацию,
* **предложение провайдера** — в некоторых удаленных локациях доступно меньше вариантов провайдеров,
* **доступность машин** — в некоторых локациях могут быть доступны только машины с 4 vCPU или 8 vCPU,
* **запросы студии** для тестирования, контроля качества, раннего доступа, закрытых бета-тестов или турниров.

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

{% hint style="success" %}
Пожалуйста, **свяжитесь с нами, чтобы спланировать релиз**, или если у вас есть какие-либо запросы по доступности локаций.
{% endhint %}

#### Решение проблем игроков

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

При разборе сообщений от игроков или инцидентов учитывайте факторы:

* **качество матчмейкинга** — игроки должны находиться близко друг к другу (в одном регионе) для [#server-placement](#server-placement "mention") чтобы получить наилучшие результаты:
  * см. [Подбор игроков](/ru/learn/podbor-igrokov.md) и [Маяки Ping](/ru/learn/orkestraciya/ping-beacons.md) наши рекомендации,
  * см. [Подробный обзор](/ru/learn/podbor-igrokov/matchmaker-in-depth.md#player-tracing) чтобы узнать, как находить серверные логи, связанные с сообщениями игроков,
* **региональные проблемы:**
  * местные интернет-провайдеры (ISP) могут в данный момент устранять инцидент,
  * некоторые регионы (например, Китай, Россия) могут быть ограничены из-за местных санкций,
* **уровень кэширования** — Edgegap будет отдавать приоритет быстрым развертываниям в закэшированных локациях:
  * [включите кэширование, чтобы разворачивать серверы за считанные секунды](/ru/learn/orkestraciya/application-and-versions.md#other-parameters-optional),
* **максимальное время на развертывание** — развертывания могут завершаться неудачей из-за медленного и тяжелого процесса инициализации:
  * см. [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md#safety-guardrails) чтобы увеличить период таймаута,
  * отложите шаги инициализации до тех пор, пока это не станет абсолютно необходимым,
* **проблемы с образом сервера или интеграцией**.

{% hint style="success" %}
**Отображайте ID развертываний в UI истории матчей клиента** чтобы при разборе можно было сопоставлять отчеты игроков.
{% endhint %}

{% hint style="info" %}
Сообщайте пользователям о массовых ошибках, временных проблемах и сбоях, чтобы смягчить негативное настроение.
{% endhint %}

## 🔄 Жизненный цикл развертывания

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

#### 1. Запуск развертывания

Развертывание для **тестовых целей** может быть запущено с помощью:

* [Unreal Engine](/ru/unreal-engine.md) - Docker Extension или плагина для проектов Unreal Engine,
* [Unity](/ru/unity.md) - плагина для проектов Unity,
* [Веб-интерфейс Dashboard](https://app.edgegap.com/deployment-management/deployments/list) - простой в использовании веб-интерфейс для тестирования интеграции сервера.

Развертывание для **рабочая производственная среда** следует запускать с помощью:

* [Подбор игроков](/ru/learn/podbor-igrokov.md) - находить других игроков и запускать серверы по требованию ([#match-bound](#match-bound "mention")).
* [Server Browser](/ru/learn/server-browser.md) - предварительно прогревать серверы с длительной инициализацией ([#regional-standby](#regional-standby "mention")).
* [Deploy API](https://docs.edgegap.com/api/#tag/Deployments/operation/deploy) - настраиваемая интеграция сервер-к-серверу (кастомное масштабирование).

{% hint style="success" %}
**Сохранить** `request_id`  **(ID развертывания) и помечайте развертывания** чтобы позже идентифицировать и устранять проблемы.
{% endhint %}

{% hint style="info" %}
При тестировании с [Deploy API](https://docs.edgegap.com/api/#tag/Deployments/operation/deploy)вы можете переопределить стандартный Dockerfile `CMD` с помощью пользовательской команды.
{% endhint %}

#### 2. Развертывание

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

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

{% hint style="success" %}
Включить [Активное кэширование в вашей версии приложения](/ru/learn/orkestraciya/application-and-versions.md#active-caching) для развертывания серверов за считанные секунды.
{% endhint %}

{% hint style="warning" %}
**Слишком много запросов 429** — чтобы обеспечить стабильность и предотвратить неожиданные счета, мы ограничиваем частоту запросов для вашей организации до **40 req/s**. [Свяжитесь с нами](mailto:info@edgegap.com) чтобы спланировать релизы, оценить трафик на запуске и подготовиться к успеху.
{% endhint %}

#### 3. Развертывание готово

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

{% hint style="success" %}
Когда развертывание будет готово, **повторяйте попытки подключения игрока до успеха**, или до заранее заданного таймаута клиента.
{% endhint %}

{% hint style="danger" %}
**Обработка сбоя сервера зависит от вашей** [**политики перезапуска процесса**](/ru/learn/orkestraciya/application-and-versions.md#safety-guardrails)**.** [Состояние сервера может быть потеряно](/ru/learn/orkestraciya/persistentnost.md#state-management).
{% endhint %}

В зависимости от [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md#active-caching) конфигурации версии, вы можете получить:

🟢 **Попадание в кэш**

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

🟡 **Теплый старт**

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

🔴 **Промах кэша**

Кэширование включено. Развертывание прошло медленнее из-за внезапного всплеска трафика до завершения распространения кэша. Включение опции «require cached locations» в вашем запросе на развертывание предотвратит это, но может привести к большему числу развертываний в состоянии Unprocessable во время неожиданных всплесков трафика.

🔴 **Холодный старт**

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

#### 4. Ошибка развертывания

Ваше развертывание может в любой момент перейти в состояние Unprocessable по неожиданным причинам. Это более вероятно при тестировании интеграции или тестировании новых серверных сборок.

**За развертывания с ошибкой с вас не взимается плата, они автоматически останавливаются через 24 часа.**

Шаги по устранению неполадок:

* Проверьте статус сервиса Edgegap с помощью [нашей страницы мониторинга доступности](https://status.edgegap.com/).
* Попробуйте протестировать контейнер сервера локально с помощью Docker Desktop, чтобы исключить проблемы на стороне Edgegap.

{% hint style="info" %}
Если вам нужна помощь, [свяжитесь с нами через Discord](https://discord.gg/MmJf8fWjnt). Для поддержки по играм в реальном времени см. нашу [систему тикетов](https://edgegap.atlassian.net/servicedesk/customer/portal/3).
{% endhint %}

{% hint style="success" %}
**При обращении за помощью** **включите ID развертывания и любые полезные детали** чтобы мы могли быстро провести расследование!
{% endhint %}

#### 5. Развертывание остановлено

**Облачные развертывания будут завершены после 24 часов работы** в соответствии с нашей политикой очистки серверов для обслуживания инфраструктуры, а также чтобы предотвратить неожиданный рост затрат, если развертывание не было корректно остановлено.

Для долгоживущих серверов свыше 24 часов рассмотрите использование [Private Fleets](/ru/learn/orkestraciya/private-fleets.md) с [Персистентность](/ru/learn/orkestraciya/persistentnost.md).

Оптимизируйте свои затраты и раньше останавливайте простаивающие развертывания, используя методы:

* **Версия приложения** [**Политика перезапуска**](/ru/learn/orkestraciya/application-and-versions.md#safety-guardrails) - предотвращает автоматический перезапуск при завершении работы или сбоях.
* **Максимальная длительность игры** - отведенное время в вашем [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md#safety-guardrails) истекло.
* **Самоостановка через** [**DELETE\_URL**](/ru/learn/orkestraciya/deployments.md#injected-environment-variables) - развертывание остановилось само после ухода игроков и завершения матча.
  * См. [Unreal Engine](/ru/unreal-engine.md#stop-deployments) и [Unity](/ru/unity.md#stop-deployments) руководства по утилитам SDK и простой интеграции.
* **Остановка из пользовательского backend** - ваша пользовательская оркестрация сессий может использовать [API развертываний](https://docs.edgegap.com/api/#tag/Deployments/operation/deployment-delete).
* [Private Fleets](/ru/learn/orkestraciya/private-fleets.md) Хост, на котором выполнялось ваше развертывание, был удален через запланированное действие.

{% hint style="info" %}
После остановки развертывания **мы инициируем корректное завершение** отправляя `SIGTERM` сигнал вашему основному процессу, предоставляя короткий период завершения. Когда он истечет, `SIGKILL` сигнал отправляется для остановки развертывания.
{% endhint %}

## 👀 Наблюдаемость

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

### Обнаруживаемость

После готовности развертыванию назначается URL ([fqdn](https://en.wikipedia.org/wiki/Fully_qualified_domain_name)) и внешний порт для каждого внутреннего порта.

{% hint style="success" %}
Используйте **теги развертывания (до 40 символов), чтобы легко помечать ваши развертывания** и [#filter-deployments](#filter-deployments "mention").
{% endhint %}

{% hint style="info" %}
**Исходящий трафик (к клиентам или backend) от ваших игровых серверов никогда не блокируется** или не фильтруется.
{% endhint %}

#### **WebSocket и защищенные WebSocket (WSS)**

Чтобы использовать netcode на основе WebSocket с Edgegap, у вас есть два варианта:

* **управляемый сертификат**, настраиваемый за 1 минуту без написания кода:
  * настройте ваш [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md) на **используйте WebSocket (WS) и включите TLS Upgrade,**
  * используйте URL Edgegap для подключения клиентов (например, `https://5fa53fa00a57.pr.edgegap.net/`)
* **самостоятельно управляемый сертификат**, если вы хотите использовать свой собственный домен:
  * настройте ваш [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md) на **используйте Secure WebSocket (WSS)**,
  * настройте собственный поток TLS-сертификата с пользовательской DNS-записью (например, в [Cloudflare](https://www.cloudflare.com/application-services/products/ssl/)).

{% hint style="danger" %}
Необработанные исключения сервера приведут к перезапуску контейнера развертывания и нарушат безопасность TLS. В таком случае, [остановите ваш сервер](#id-5.-deployment-stopped) и [сопоставьте игроков с новым развертыванием](/ru/learn/podbor-igrokov.md#custom-lobby). [Состояние сервера может быть потеряно](/ru/learn/orkestraciya/persistentnost.md#state-management).
{% endhint %}

### Внедряемые переменные <a href="#injected-environment-variables" id="injected-environment-variables"></a>

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

{% hint style="success" %}
Получайте значения переменных с помощью [GetEnvironmentVariable в C#](https://learn.microsoft.com/en-us/dotnet/api/system.environment.getenvironmentvariable?view=net-8.0) или [GetEnvironmentVariable в C++](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/GenericPlatform/FGenericPlatformMisc/GetEnvironmentVariable).
{% endhint %}

{% hint style="info" %}
См. [Переменные версии приложения](/ru/learn/orkestraciya/application-and-versions.md#injected-variables) и [Переменные матчмейкера](/ru/learn/podbor-igrokov/matchmaker-in-depth.md#injected-variables) в дополнение к переменным развертывания ниже.
{% endhint %}

#### **Пользовательские переменные**

Определите до 20 пользовательских переменных для каждого развертывания, каждая из которых может содержать до 4 КБ строковых данных.

{% hint style="warning" %}
**Избегайте использования зарезервированных имен (ниже), иначе ваши пользовательские переменные будут перезаписаны!**
{% endhint %}

Получайте важную информацию, считывая переменные, внедренные в ваши серверы Edgegap:

#### **Идентификаторы**

* **`ARBITRIUM_REQUEST_ID`**  - например `f68e011bfb01` .
  * Уникальный ID развертывания, также называемый request ID. Используется для получения дополнительной информации.
  * URL-адреса развертываний всегда имеют формат `{ARBITRIUM_REQUEST_ID}.pr.edgegap.net`.
* **`ARBITRIUM_PUBLIC_IP`**  - например `162.254.141.66` .
  * Публичный IP-адрес этого хоста, можно использовать для подключения вместо URL.
* **`ARBITRIUM_HOST_ID`**  - например `alpha-north-america-70364ef8` .
  * Уникальный идентификатор машины, на которой размещено ваше развертывание, используемый совместно с другими развертываниями.
* **`ARBITRIUM_DEPLOYMENT_TAGS`**  - например `tag1,tag2` .
  * Пользовательские теги развертывания, разделенные запятыми, [полезные для удобного поиска и фильтрации](#filter-deployments).
* **`ARBITRIUM_PRIVATE_FLEET_ID`** - например `PUBLIC_CLOUD` , или ID флота, если размещено в [Private Fleets](/ru/learn/orkestraciya/private-fleets.md).

#### Характеристики ресурсов

* **`ARBITRIUM_HOST_IN_PRIVATE_FLEET`** - например `false` , указывающий, размещен ли на [Private Fleets](/ru/learn/orkestraciya/private-fleets.md).
* **`ARBITRIUM_HOST_BASE_CLOCK_FREQUENCY`**  - например `2000` , частота процессора в МГц.
* **`ARBITRIUM_DEPLOYMENT_VCPU_UNITS`**  - например `256`, выделенные единицы vCPU (1024 = 1 vCPU).
* **`ARBITRIUM_DEPLOYMENT_MEMORY_MB`**  - например `512`, выделенная ОЗУ в МБ (1024 = 1 ГБ).

#### **Управление жизненным циклом**

* **`ARBITRIUM_DELETE_URL`**  - например `https://api.edgegap.com/v1/self/stop/9f511e17/660`.
  * Вызывается из развертывания, [развертывание будет корректно остановлено](#id-5.-deployment-stopped).
  * Требует уникального одноразового `ARBITRIUM_DELETE_TOKEN` в `Authorization` заголовке.
* **`ARBITRIUM_DELETE_TOKEN`**  - например `7df4cd933df87084b34ae80d8abde293`.
* **`ARBITRIUM_CONTEXT_URL`**  - например `https://api.edgegap.com/v1/context/9170f5211e17/17`.
  * Вызывается только из развертывания, возвращает дополнительные сведения о развертывании.
  * Требует уникального `ARBITRIUM_CONTEXT_TOKEN` в `Authorization` заголовке.
* **`ARBITRIUM_CONTEXT_TOKEN`**  - например `dfaf50b9333b9ee07b22ed247e4a17e6`.

#### **Обнаруживаемость**

* **`ARBITRIUM_PORT_GAMEPORT_INTERNAL`**  - например `7777` , внутренний порт для прослушивания сервера.
* **`ARBITRIUM_PORT_GAMEPORT_EXTERNAL`**  - например `31504` , внешний порт для подключений клиентов.
  * Значения внешнего порта рандомизируются для каждого развертывания в целях безопасности.
* **`ARBITRIUM_PORT_GAMEPORT_PROTOCOL`**  - например `UDP` , протокол вашего сетевого транспорта.

{% hint style="success" %}
Примеры предполагают, что вы назвали свой порт `gameport` (по умолчанию). **Каждый порт добавляет дополнительный набор очищенных** [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md#port-mapping) **переменных:** `@Super Port!` ⇒ `ARBITRIUM_PORT_SUPER_PORT_INTERNAL` .
{% endhint %}

* **`ARBITRIUM_BEACON_ENABLED`**  - например `true`, если развернуто на [Private Fleets](/ru/learn/orkestraciya/private-fleets.md) с [Маяки Ping](/ru/learn/orkestraciya/ping-beacons.md).
* **`ARBITRIUM_HOST_BEACON_PUBLIC_IP`**  - например `139.177.198.69` , публичный IP ближайшего маяка.
* **`ARBITRIUM_HOST_BEACON_PORT_UDP_EXTERNAL`**  - например `30199`, для измерения пинга по UDP.
* **`ARBITRIUM_HOST_BEACON_PORT_TCP_EXTERNAL`**  - например `30456`, для измерения пинга по TCP.

#### **Структурированная информация (JSON как строка)**

{% hint style="info" %}
Переменные среды **хранятся как JSON в строковом виде**, анализируйте их с помощью SDK или собственного метода.
{% endhint %}

<details>

<summary><strong>ARBITRIUM_DEPLOYMENT_LOCATION</strong>:<br>- Подробная информация о местоположении развертывания.</summary>

```json
ARBITRIUM_DEPLOYMENT_LOCATION="{
  "city": "Montreal",
  "country": "Canada",
  "continent": "North America",
  "administrative_division": "Quebec",
  "timezone": "Eastern Time",
  "latitude": 45.513707,
  "longitude": -73.619073
}"
```

</details>

<details>

<summary><strong>ARBITRIUM_PORTS_MAPPING</strong>:<br>- Подробная информация о ваших внутренних и внешних портах.</summary>

```json
ARBITRIUM_PORTS_MAPPING="{
  "ports": {
    "gameport": {
      "name": "Game Port",
      "internal": 7777,
      "external": 31504,
      "protocol": "UDP"
    },
    "webport": {
      "name": "Web Port",
      "internal": 8888,
      "external": 31553,
      "protocol": "TCP"
    }
  }
}"
```

</details>

### Мониторинг панели управления

Наш [Панель управления](https://app.edgegap.com/) предоставляет инструменты для мониторинга масштабируемости вашего сервера и помощи в эксплуатации.

#### Аналитика

{% hint style="success" %}
Найдите [панели аналитики в боковом меню](https://app.edgegap.com/analytics/dashboards/list) в категории Хостинг серверов и оркестрация.
{% endhint %}

:star2: [**Обновитесь до тарифа Pay as You Go**](https://app.edgegap.com/user-settings?tab=memberships) **чтобы получить доступ к подробным метрикам и аналитике производительности сервера:**

* **Общие сведения:** отслеживайте релизы с текущим числом серверов по версиям + обзором использования ресурсов,
* **Сведения о CPU**: устраняйте неполадки с замедленными серверами из-за ресурсоемких операций процессора,
* **Сведения о памяти**: уменьшайте число перезапусков сервера из-за превышения выделенной памяти,
* **Сведения о сети:** выявляйте неэффективные сетевые шаблоны и оптимизируйте netcode.

<figure><img src="/files/da67a5f6cdd190bd351ecf9649be750397d1a88b" alt=""><figcaption></figcaption></figure>

#### Карта развертывания

{% hint style="success" %}
Найдите карту развертывания в [на странице сведений о развертывании на панели управления](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

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

<figure><img src="/files/021af5f7e77836de2bd3d761e20d0711fd329b56" alt=""><figcaption></figcaption></figure>

#### Точки баланса развертывания

{% hint style="success" %}
Найдите тепловую карту точек баланса развертывания в [на странице сведений о приложении на панели управления](https://app.edgegap.com/application-management/applications/list).
{% endhint %}

Просматривайте тепловую карту точек баланса развертывания и фильтруйте по [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md). Точки баланса — это приблизительные локации с одинаковой сетевой близостью к каждому игроку в данном развертывании:

<figure><img src="/files/7caa8210bafb4d800df3d1d148f0474ddcdc1443" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Горячие точки баланса в странных местах (например, Гренландия) указывают на подбор игроков, находящихся далеко друг от друга. Узнайте о [#connection-quality](#connection-quality "mention") и [Маяки Ping](/ru/learn/orkestraciya/ping-beacons.md) оптимизации вашего матчмейкинга.
{% endhint %}

#### Логи развертывания

{% hint style="success" %}
Найдите логи развертывания в [на странице сведений о развертывании на панели управления](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

Логи развертывания отображают сведения о [#deployment-lifecycle](#deployment-lifecycle "mention"):

<figure><img src="/files/6ac56fa110690ece4780520fbd25e588b973d0bc" alt=""><figcaption></figcaption></figure>

#### Логи контейнера

{% hint style="success" %}
Найдите логи контейнера в [на странице сведений о развертывании на панели управления](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

Просматривайте логи игрового сервера при возникновении проблем или во время отладки:

<figure><img src="/files/5ea4d78bef957a3f537e1a3030a1646fa43a0142" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**После остановки развертывания логи контейнера удаляются.** Настройте [хранилище логов S3 от стороннего провайдера](/ru/docs/endpoint-storage.md) чтобы сохранять логи.
{% endhint %}

#### Метрики контейнера

{% hint style="success" %}
Найдите метрики контейнера в [на странице сведений о развертывании на панели управления](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

Просматривайте метрики контейнера (процессор, память, сеть), чтобы:

* выявлять распространенные проблемы соединения при [#troubleshooting](#troubleshooting "mention"),
* обнаруживать неэффективные шаблоны реализации, вызывающие всплески использования ресурсов,
* точно определять неэффективное использование ресурсов в определенных сценариях,
* проверять изменения в использовании ресурсов вашего сервера во время оптимизации,
* сравнивать потребление ресурсов и длительность инициализации вашего сервера.

Исторические метрики отображают средние значения с периодом 1 минута и доступны на бесплатном тарифе.

:star2: [**Обновитесь до тарифа Pay as You Go**](https://app.edgegap.com/user-settings?tab=memberships) **чтобы получить точные метрики с интервалом в 1 секунду.**

<figure><img src="/files/897aa5e140edcac6ce257a401b101dcefd019ab0" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
[Свяжитесь с нами](mailto:info@edgegap.com) перед вашим релизом, чтобы запросить поддержку хостинга в реальном времени для крупных релизов.
{% endhint %}

### Контекст и статус

Дополнительную информацию о развертывании можно получить в формате JSON:

* изнутри развертывания (игрового сервера) с помощью [API контекста развертывания](https://docs.edgegap.com/api/#tag/Context/operation/context-get),
* извне развертывания (бэкенд / сторонний сервис) с помощью [API статуса развертывания](https://docs.edgegap.com/api/#tag/Deployments/operation/deployment-status-get).

{% hint style="info" %}
Context API (из развертывания) требует токен Context API, тогда как Status API использует ваш токен Edgegap.
{% endhint %}

{% hint style="danger" %}
**Слишком много запросов 429 - Context и Status API ограничены 20 запросами/с на организацию.**
{% endhint %}

{% hint style="success" %}
**Используйте** [#webhooks](#webhooks "mention") **для автоматизаций (пользовательский матчмейкинг), чтобы избежать ограничения частоты запросов и обеспечить масштабируемость.** Context и Status API предназначены только для разработки, QA и устранения неполадок.
{% endhint %}

### Фильтровать развертывания

Чтобы быстро искать среди всех развертываний, вы можете [использовать нашу панель управления](https://app.edgegap.com/deployment-management/deployments/list):

<figure><img src="/files/27bbc929e7ba07ce4d76c565e02c162f9485c167" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
В качестве альтернативы, позвольте игрокам **выбрать постоянный (всегда онлайн) сервер** из списка с [Server Browser](/ru/learn/server-browser.md).
{% endhint %}

[Выводить список развертываний с помощью API](https://docs.edgegap.com/api/#tag/Deployments/operation/deployments-get) и применять фильтры через интеграции бэкенда:

<table><thead><tr><th width="237">Атрибут развертывания</th><th width="193">Операторы</th><th>Пример значения</th></tr></thead><tbody><tr><td><a href="/pages/4ad5d792bc82dceeaec6d7dd56165ae188da0417#deployment-lifecycle"><code>status</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"ready"</code> или <code>"error"</code></td></tr><tr><td><a href="#observability"><code>request_id</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a> </td><td><a data-footnote-ref href="#user-content-fn-4"><code>"7e709a0d8efd"</code></a></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><a data-footnote-ref href="#user-content-fn-4"><code>[ "7e709a0d8efd", "4ba353100b4b" ]</code></a></td></tr><tr><td><a href="#discoverability"><code>tags</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"tagA"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "tagA", "tagB" ]</code></td></tr><tr><td><a href="#id-1.-start-a-deployment"><code>created_at</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-7"><code>lte</code></a>  или <a data-footnote-ref href="#user-content-fn-8"><code>gte</code></a></td><td><a href="https://en.wikipedia.org/wiki/ISO_8601"><code>2025-05-12T20:03:20Z</code></a></td></tr><tr><td><a href="/pages/f5cb6455be5c828fac78fc0c2b164c4b4cbd9c16"><code>application</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"my-app"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "my-app", "my-other-app" ]</code></td></tr><tr><td><a href="/pages/f5cb6455be5c828fac78fc0c2b164c4b4cbd9c16"><code>version</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"1.0.0"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-9"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "1.0.0", "prod" ]</code></td></tr><tr><td><a href="/pages/29817f7f12eb7460eb5569ee2fce1cd1a966d23d"><code>fleet_name</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"my-app-fleet-europe"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "fleet-eu", "fleet-us" ]</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-10"><code>ilike</code></a></td><td><code>"%-eu%"</code></td></tr><tr><td><a href="/pages/29817f7f12eb7460eb5569ee2fce1cd1a966d23d"><code>host_name</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  или <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"alpha-north-america-95fab093"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>в</code></a>  или <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "alpha-north-america-95fab093" ]</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-10"><code>ilike</code></a></td><td><code>"%north-america%"</code></td></tr></tbody></table>

{% hint style="info" %}
Каждый атрибут может иметь не более 1 оператора фильтра в одном запросе. Смотрите [Справочник API](/ru/docs/api.md) для подробностей.
{% endhint %}

Сортируйте результаты по нескольким полям в порядке их появления в запросе:

| Атрибут развертывания                                                                  | Порядок                                                                  |
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| [`created_at`](#id-1.-start-a-deployment)                                              | [`asc`](#user-content-fn-11)[^11] или [`desc`](#user-content-fn-12)[^12] |
| [`available_session_sockets`](broken://pages/af47f00633ef43a181ec41a0562bbc4e007a3046) | [`asc`](#user-content-fn-13)[^13] или [`desc`](#user-content-fn-14)[^14] |

Примеры запросов с фильтрами:

<details>

<summary>Список <a href="#id-4.-deployment-error">Развертывания с ошибкой</a> для устранения неполадок и удаления.</summary>

Закодированный URL:

```
https://api.edgegap.com/v1/deployments?query={"filters":[{"field":"status","operator":"eq","value":"error"},{"field":"application","operator":"eq","value":"my-app"},{"field":"version","operator":"eq","value":"green"}],"order_by":[{"field":"created_at","order":"desc"}]}
```

Отформатированный JSON-запрос:

```json
{
  "filters": [
    {
      "field": "status",
      "operator": "eq",
      "value": "error"
    },
    {
      "field": "application",
      "operator": "eq",
      "value": "my-app"
    },
    {
      "field": "version",
      "operator": "eq",
      "value": "green"
    }
  ],
  "order_by": [
    {
      "field": "created_at",
      "order": "desc"
    }
  ]
}
```

</details>

<details>

<summary>Список <a href="/pages/4ee817820b702f68c6cecc5b9b02c79aa0da8963#rolling-updates-and-ab-tests">Развертывания с устаревшей версией приложения</a> чтобы подтвердить, что релиз завершен.</summary>

Закодированный URL:

```
https://api.edgegap.com/v1/deployments?query={"filters":[{"field":"status","operator":"eq","value":"ready"},{"field":"application","operator":"eq","value":"my-app"},{"field":"version","operator":"eq","value":"blue"}],"order_by":[{"field":"created_at","order":"desc"}]}
```

Отформатированный JSON-запрос:

```json
{
  "filters": [
    {
      "field": "status",
      "operator": "eq",
      "value": "ready"
    },
    {
      "field": "application",
      "operator": "eq",
      "value": "my-app"
    },
    {
      "field": "version",
      "operator": "eq",
      "value": "blue"
    }
  ],
  "order_by": [
    {
      "field": "created_at",
      "order": "desc"
    }
  ]
}
```

</details>

{% hint style="success" %}
Не забудьте добавить `Authorization` заголовок с вашим токеном Edgegap API в запросе.
{% endhint %}

### Вебхуки

Получайте простые HTTP-уведомления в своем игровом бэкенде об изменениях в [#deployment-lifecycle](#deployment-lifecycle "mention") указав URL вебхука в вашем [запросе к API развертывания](/ru/docs/api/vydelennye-servery.md#post-deployments). Доступно для:

* При готовности: контейнер развертывания [успешно запущен](#id-1.-start-a-deployment) (после этого сервер начинает инициализацию),
* При ошибке: развертывание не удалось запустить, и [#id-4.-deployment-error](#id-4.-deployment-error "mention") произошла ошибка,
* При завершении: [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") и игровой сервер больше недоступен.

Вебхуки Ready и Error никогда не будут срабатывать для одного и того же развертывания.

<details>

<summary>Пример полезной нагрузки вебхука</summary>

```json
{
  "request_id": "f68e011bfb01",
  "application": "my-game-server",
  "version": "2024.01.30-16.23.00-UTC",
  "fqdn": "f68e011bfb01.pr.edgegap.net",
  "public_ip": "162.254.141.66",
  "deployed_at": "2026-02-10T20:35:48Z",
  "termination_scheduled_at": "2026-02-10T21:35:48Z",
  "ports": {
    "gameport": {
      "external": 31504,
      "internal": 7777,
      "protocol": "UDP",
      "name": "gameport",
      "tls_upgrade": false,
      "link": "f68e011bfb01.pr.edgegap.net:31504",
      "proxy": null
    }
  },
  "location": {
    "city": "Montreal",
    "country": "Canada",
    "continent": "North America",
    "administrative_division": "Quebec",
    "timezone": "Eastern Time",
    "latitude": 45.513707,
    "longitude": -73.619073
  },
  "tags": [
    "tag1",
    "tag2"
  ],
  "host_id": "alpha-north-america-70364ef8",
  "host_in_private_fleet": false,
  "private_fleet_id": "PUBLIC_CLOUD",
  "vcpu_units": 256,
  "memory_mib": 512
}
```

</details>

{% hint style="success" %}
**Вебхуки — это основной рекомендуемый способ интеграции пользовательского бэкенда с развертыванием.**
{% endhint %}

{% hint style="warning" %}
**Вебхуки не повторяются**, и может быть потеряно, если ваш бэкенд не обработает запрос из-за ограничения частоты или ошибки. В случае если вы не получите webhook в ожидаемый срок, используйте API статуса.
{% endhint %}

{% hint style="info" %}
Webhook’и отслеживают жизненный цикл развертывания, но не знают о состоянии инициализации вашей сцены/уровня. Чтобы отслеживать прогресс загрузки вашей сцены/уровня, реализуйте пользовательский webhook на вашем игровом сервере.
{% endhint %}

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

При устранении неполадок развертывания:

1. убедитесь, что в вашем [#deployment-logs](#deployment-logs "mention") и [#container-logs](#container-logs "mention"),
2. запустите сервер локально, чтобы исключить ошибки интеграции,
3. ознакомьтесь с шагами по устранению неполадок на этой странице,
4. свяжитесь с нами в [Discord сообщества](https://discord.gg/MmJf8fWjnt) и укажите ID вашего развертывания.

{% hint style="info" %}
См. [#player-issue-resolution](#player-issue-resolution "mention") наши рекомендации по работе с отзывами игрового сообщества.
{% endhint %}

<details>

<summary>Не удается подключить клиенты к серверу - <code>Время ожидания запроса истекло.</code>, <code>Время ожидания запроса истекло.</code> , <code>ConnectionFailed</code> , или <code>Проверка порта не удалась</code>.</summary>

* Сначала убедитесь, что развертывание имеет статус Ready и в журнале развертывания нет исключений или ошибок во время выполнения. Если ваше развертывание остановилось, проверьте логи в нашем [Панель управления](https://app.edgegap.com/deployment-management/deployments/list).
* Если вы используете netcode Mirror, вам нужно иметь [«Auto Start Server»](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) выбранным в вашем `NetworkManager` , пересоберите, отправьте и повторно разверните сервер.
* Если вы используете netcode FishNet, вам нужно включить [«Start on Headless»](https://fish-networking.gitbook.io/docs/manual/components/managers/server-manager#settings-are-general-settings-related-to-the-servermanager) в вашем `ServerManager`, пересоберите, отправьте и повторно разверните сервер.
* Если вы используете netcode Photon Fusion 2, убедитесь, что ваш сервер передает публичный IP развертывания, внешний порт и `roomCode` на сервере, а также тот же код комнаты в клиенте в [«NeworkRunner.StartGame»](https://doc.photonengine.com/fusion/current/manual/network-runner#creating-or-joining-a-room) параметре `StartGameArgs`. ID развертывания (например, `b63e6003b19f`) — отличный выбор, поскольку он глобально уникален и легко доступен клиенту через [матчмейкер](/ru/learn/podbor-igrokov/matchmaker-in-depth.md) назначение и к [Подробный обзор](/ru/learn/podbor-igrokov/matchmaker-in-depth.md#injected-environment-variables).
* Далее, пожалуйста, убедитесь, что настройка порта в сетевых настройках сборки вашего сервера совпадает с внутренним портом в вашем [версии приложения](https://app.edgegap.com/application-management/applications/list). Вы можете изменить сопоставление портов, отредактировав [версии приложения](https://app.edgegap.com/application-management/applications/list) без пересборки. Найдите свой протокол в интеграции netcode.
* Пожалуйста, убедитесь, что игровой клиент подключается к **внешнему порту** указанному на странице сведений о вашем развертывании; это значение всегда будет случайным по соображениям безопасности.
* Если вы используете протокол Secure Websocket (WSS) в вашей интеграции netcode, убедитесь, что в вашей [версии приложения](https://app.edgegap.com/application-management/applications/list) конфигурации порта для WSS включено обновление до TLS.
* Вы находитесь в Китае и используете [Smart Fleets](https://docs.edgegap.com/docs/deployment/session/fleet-manager/fleet)? Ваше соединение может быть заблокировано Великим китайским файрволом. Рассмотрите возможность добавить в свой пул сервер, расположенный в Китае, или использовать VPN для подключения.

</details>

<details>

<summary>Мое развертывание остановилось/перезапустилось, и я больше не могу получить доступ к его логам.</summary>

* Если процесс сервера аварийно завершится из-за исключения, наша система попытается автоматически перезапустить сервер. Рассмотрите возможность тестирования сервера локально, чтобы выявить первопричину.
* Мы храним логи только в течение времени развертывания; если вы хотите просмотреть логи после остановки развертывания, пожалуйста, [интегрируйте стороннее хранилище логов](https://docs.edgegap.com/docs/deployment/endpoint-storage).
* См. [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") чтобы выявить все причины остановки вашего развертывания.

</details>

<details>

<summary>Мое развертывание автоматически остановилось через X минут.</summary>

* Для развертываний Free Tier установлен лимит в 60 минут; пожалуйста, рассмотрите возможность обновления аккаунта.
* Cloud-развертывания будут завершены после 24 часов работы в соответствии с нашей политикой очистки серверов, для обслуживания инфраструктуры и чтобы предотвратить непредвиденные расходы, если развертывание не было корректно остановлено. Для серверов, работающих дольше 24 часов, рассмотрите использование [Private Fleets](/ru/learn/orkestraciya/private-fleets.md) с [Персистентность](/ru/learn/orkestraciya/persistentnost.md).
* См. [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") чтобы выявить все причины остановки вашего развертывания.

</details>

<details>

<summary>Мое развертывание готово, но я не могу подключиться к нему еще несколько минут после этого.</summary>

* После того как развертывание будет Ready, начинается инициализация игрового движка. Этот процесс может занять от нескольких секунд до нескольких минут, и в этот период сервер не принимает подключения игроков.
* Рассмотрите возможность оптимизации инициализации сервера, чтобы сократить это время.
* Игровые клиенты должны повторять попытку подключения с интервалом в 1 секунду в течение ограниченного времени (в зависимости от длительности инициализации), после чего они возвращаются в подбор игроков.
* Рассмотрите возможность добавления загрузочной сцены, чтобы сервер мог выполнять инициализацию (и переход уровня в случае Unreal Engine) одновременно с клиентами, синхронизируя при этом состояние обоих.

</details>

<details>

<summary>Мое устройство Meta Quest выдает <code>HTTP 0: Не удается разрешить имя целевого хоста</code> .</summary>

* При сборке приложений Unity для целевой платформы Android разрешение на доступ к Интернету может автоматически удаляться из выходного артефакта сборки APK клиента.
* Снова добавьте разрешения в (после этого потребуется пересобрать клиент):
  * Project Settings / OpenXR / :gear: Meta Quest Support / Force Remove Internet Permissions (снимите галочку).
  * Player Settings / Internet Access (установите Require).

</details>

<details>

<summary>Что произойдет, если игрок покинет мое развертывание?</summary>

* По умолчанию серверы не отклоняют подключения игроков. Аутентификация игроков — на усмотрение ваших разработчиков, поскольку можно использовать множество различных методов и провайдеров аутентификации игроков.
* Игровые клиенты могут хранить данные подключения локально, чтобы попытаться переподключиться в случае неожиданного сбоя клиента.
* Чтобы позволить игрокам присоединяться к уже идущим матчам, рассмотрите использование [Подробный обзор](/ru/learn/podbor-igrokov/matchmaker-in-depth.md#backfill) или [Sessions](https://docs.edgegap.com/docs/deployment/session).

</details>

<details>

<summary>Мой сервер показывает загрузку ЦП 100% после перехода в состояние Ready.</summary>

* Это может не быть проблемой, поскольку игровые движки обычно выполняют ресурсоемкие операции ЦП во время инициализации сервера. Если загрузка ЦП не снизится через 2–3 минуты после запуска развертывания, возможно, вам потребуется оптимизировать сервер или увеличить ресурсы версии приложения.
* Снижение tick rate может повлиять на загрузку ЦП, поскольку сервер будет выполнять меньше операций обмена сообщениями.
* Если вы используете netcode Mirror, вам нужно иметь [«Auto Start Server»](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) выбранным в вашем `NetworkManager` , пересоберите, отправьте и повторно разверните сервер.
* Если вы используете netcode FishNet, вам нужно включить [«Start on Headless»](https://fish-networking.gitbook.io/docs/manual/components/managers/server-manager#settings-are-general-settings-related-to-the-servermanager) в вашем `ServerManager`, пересоберите, отправьте и повторно разверните сервер.
* В Free Tier вам доступны только 1,5 vCPU и 3 ГБ памяти (RAM).
* Вы можете увеличить выделенные ресурсы при создании новой версии приложения. Вы можете дублировать версию приложения в нашей панели управления и при необходимости настраивать эти значения без пересборки сервера или образа.

</details>

<details>

<summary>Мое развертывание постоянно перезапускается и показывает ошибку `OOM kill`.</summary>

* Такое поведение вызвано превышением выделенного объема памяти. Рассмотрите оптимизацию использования памяти с помощью object pooling, сжатия или удаления ненужных объектов в вашей сцене.
* Убедитесь, что в вашем проекте загружается сцена по умолчанию, содержащая ваш `NetworkManager` и что сцена включена в Build Settings Unity.
* В Free Tier вам доступны только 1,5 vCPU и 3 ГБ памяти (RAM).
* Вы можете увеличить выделенные ресурсы при создании новой версии приложения. Вы можете дублировать версию приложения в нашей панели управления и при необходимости настраивать эти значения без пересборки сервера или образа.

</details>

<details>

<summary>Иногда использование памяти (RAM) на моем сервере резко возрастает до высокого значения — это проблема?</summary>

* Пока вы остаетесь в пределах выделенного объема памяти для версии приложения, это не проблема.&#x20;
* Превышение выделенного объема памяти для версии приложения приведет к \`OOM kill\` (см. выше).

</details>

<details>

<summary>Будет ли производительность моего сервера затронута другими серверами, работающими на той же машине?</summary>

* Нет, наша платформа гарантирует, что выделенные ресурсы не будут использоваться другими студиями или другими серверами на общей инфраструктуре. С Edgegap нет «шумных соседей».

</details>

[^1]: сессии могут длиться до 24 часов

[^2]: равно

[^3]: не равно

[^4]: request\_id (ID развертывания)

[^5]: в массиве

[^6]: не в массиве

[^7]: меньше или равно

[^8]: больше или равно

[^9]: &#x20;в массиве

[^10]: сопоставление с шаблоном без учета регистра:

    * используйте `%`  для любой последовательности
    * используйте `_`  для любого одного символа

[^11]: по возрастанию, сначала старые

[^12]: по убыванию, сначала новые

[^13]: по возрастанию, сначала заполненные

[^14]: по убыванию, сначала пустые
