uUnreal Engine

Учитесь на практике и разверните свой первый выделенный сервер на Edgegap. К концу этого руководства вы развернёте выделенный сервер с Edgegap бесплатно.

Создание с помощью Docker Desktop — самый быстрый, простой и надёжный способ начать.

✔️ Подготовка

chevron-rightУстановите расширение Edgegap Quickstart для Dockerarrow-up-righthashtag
circle-info

Уверены в своих сборках серверов? Перейти к Unreal Engine и Расширенные функции.

⚙️ 1. Настройка проекта

circle-info

Этот метод не требует скачивания исходников Unreal Engine или сборки из исходников!

☑️ Начните с проверки вашей версии Unreal Engine - предварительно заполнено значением из файлов вашего проекта.

☑️ Введите имя пользователя GitHub и PAT из Unreal Engine, чтобы загружать зависимости с GitHub.

🔧 2. Сборка игрового сервера

Теперь мы соберём и подготовим ваш проект и упакуем его в легко переиспользуемый образ Docker.

☑️ Вы можете настроить следующие параметры (или оставить значения по умолчанию):

  • Имя образа — уникальный идентификатор по вашему выбору, маркирующий сборку сервера перед отправкой.

    • Обычно это будет включать название вашей игры — например «my-game-server».

  • Тег образа — идентификатор, указывающий на конкретную версию вашего образа.

    • Термин «артефакт сборки» иногда используется для обозначения конкретной версии вашего образа.

    • Метки с временной меткой — отличный вариант, например 2024.01.30-16.23.00-UTC (по умолчанию).

☑️ Собрать проект когда вы будете довольны своей конфигурацией. Завершение этого шага добавит новый образ с вашим исполняемым файлом сервера для Linux в локальный клиент Docker.

✅ Теперь вы можете перейти к следующему шагу.

🧪 3. Тестирование сервера локально

☑️ Выберите тег образа, который вы хотите запустить локально (удалённые образы будут скачаны). По желанию можно добавить дополнительные аргументы docker runarrow-up-right для настройки локального теста:

  • -p 7777:7777/udp - это сопоставление портов вашего локального контейнера портов контейнера,

  • -e ARBITRIUM_PORT_GAMEPORT_INTERNAL=7777 это переменная окружения имитирующая реальное развёртывание Edgegap, указывающая вашему серверу внутренний порт для прослушивания подключений игроков.

☑️ Когда вы будете довольны конфигурацией, нажмите Запустить локальный сервер. Выполнение этого шага приведёт к запуску нового контейнера на вашей машине разработки.

☑️ Теперь пришло время подключить игровой клиент вашего Unreal Engine Editor (PIE) к локальному контейнеру сервера. Откройте консоль Unreal PIE с помощью ~ (тильда) и подключитесь с помощью open <ip>:<port>:

  • ip = localhost или 127.0.0.1 (в большинстве случаев эквивалентно),

  • порт = сгенерированное внешнее значение порта контейнера в GUI Docker.

✅ Теперь вы можете перейти к следующему шагу.

chevron-rightУстранение неполадок и FAQhashtag

Не могу подключить клиентов к серверу - Превышено время ожидания запроса. , 请求超时 , ConnectionFailed , или Проверка порта не удалась

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

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

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

  • Пожалуйста, убедитесь, что вы переименовали целевой файл и настроили сборки игры, как описано в шаге ⚙️ 1. Настройка проекта.


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

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

  • Рассмотрите возможность оптимизации инициализации сервера, чтобы сократить этот период.

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

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


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

  • Пожалуйста, установите плагин Steam Subsystem от Epic через Fab asset store.

  • При использовании Edgegap Integration Kit (EGIK) с исходной версией SteamCore, скачанной с GitHub, плагин Steam Subsystem от Epic не включён из-за политики распространения плагинов Epic Games.


Я подключился, но экран полностью тёмный.

  • Проверьте, что у вас правильно указан Карта по умолчанию для игры установлена в Edit / Project Settings / Maps & Modes.

☁️ 4. Публикация на Edgegap

☑️ Выберите имя приложения чтобы маркировать и группировать похожие образы на Edgegap.

☑️ Выберите тег образа, который вы хотите опубликовать и Загрузить образ. Выполнение этого шага приведёт к загрузке вашего образа сервера в реестр Edgegap и созданию новой версии приложения в вашем веб-браузере. Обязательно создайте ваш портов контейнера когда будет предложено, с значениями по умолчанию.

circle-check

✅ Теперь вы можете перейти к следующему шагу.

🚀 5. Развёртывание в облаке

☑️ Теперь мы выполним финальный тест и подключим ваш Unreal Engine Editor к облачному развёртыванию. Скопируйте Host развёртывания вместо IP сервера и порт развёртывания внешнему порту, откройте консоль Unreal в игровом клиенте (тильда ~) и введите open {host}:{port} .

chevron-rightУстранение неполадок и FAQhashtag

Не могу подключить клиентов к серверу - Превышено время ожидания запроса. , 请求超时 , ConnectionFailed , или Проверка порта не удалась

  • Сначала убедитесь, что развёртывание Ready, и в логах развёртывания нет исключений или ошибок. Если развёртывание остановилось, проверьте логи в нашей Панели управленияarrow-up-right.

  • Пожалуйста, проверьте, что настройка порта в сетевом коде сборки сервера совпадает с внутренним портом в вашей версии приложенияarrow-up-right. Для сборок с плагинами порт устанавливается автоматически. Вы можете изменить отображение портов, отредактировав версии приложенияarrow-up-right без пересборки. Найдите ваш протокол в интеграции сетевого кода.

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

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

  • Находитесь ли вы в Китае и используете Smart Fleetsarrow-up-right? Ваше соединение может быть заблокировано Великой Файрволл. Рассмотрите возможность добавления сервера, расположенного в Китае, в ваш флит или использования VPN для подключения.


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

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

  • Рассмотрите возможность оптимизации инициализации сервера, чтобы сократить этот период.

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

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


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

  • Пожалуйста, установите плагин Steam Subsystem от Epic через Fab asset store.

  • При использовании Edgegap Integration Kit (EGIK) вместе с исходной версией SteamCore Integration Kit (SIK), скачанной с GitHub, плагин Steam Subsystem от Epic не включён из-за политики распространения плагинов Epic Games.


Я подключился, но экран полностью тёмный.


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

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

  • Мы храним логи только на время работы развёртывания; если вы хотите просмотреть логи после остановки развёртывания, пожалуйста, интегрируйте стороннее хранилище логовarrow-up-right.

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


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

  • Развёртывания Free Tier имеют ограничение в 60 минут, пожалуйста, рассмотрите возможность обновления аккаунта.

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

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


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

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

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

  • Чтобы позволить игрокам присоединяться к текущим играм, рассмотрите использование Подробный обзор или Сессийarrow-up-right.


Мой сервер показывает 100% загрузку CPU после того, как стал готов.

  • Это может быть не проблемой, так как игровые движки выполняют ресурсоёмкие операции на CPU во время инициализации сервера. Если загрузка CPU не снижается через 2–3 минуты после старта развёртывания, возможно, вам нужно оптимизировать сервер или увеличить ресурсы версии приложения.

  • Снижение частоты тиков может помочь контролировать использование CPU за счёт обработки меньшего количества сообщений.

  • В Free Tier вам доступно максимум 1.5 vCPU и 3 ГБ памяти (RAM).

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


Моё развёртывание постоянно перезапускается и показывает ошибку OOM kill

  • Это вызвано превышением выделенного объёма памяти. Рассмотрите оптимизацию использования памяти с помощью пулов объектов, сжатия или удаления ненужных объектов в сцене.

  • В Free Tier вам доступно максимум 1.5 vCPU и 3 ГБ памяти (RAM).

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


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

  • Пока вы не превышаете выделенный объём памяти версии приложения, это не является проблемой.

  • Превышение выделенного объёма памяти версии приложения приведёт к OOM kill (см. выше).


Повлияет ли производительность моего сервера наличие других серверов на той же машине?

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

👉 Следующие шаги

Остановить развёртывания

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

Если вы следовали этому руководству и собирали с нашим расширением Docker, вы можете просто вызвать метод FGenericPlatformMisc::RequestExit . Мы добавили скрипт, управляющий процессом вашего сервера в упакованном образе, который автоматически выполнит корректное завершение развёртывания.

Чтобы настроить управление жизненным циклом сервера, измените наш пример StartServer.sharrow-up-right скрипт.

circle-info

Предпочитаете управлять жизненным циклом из Unreal? Смотрите Инструменты для разработчиков для API самостопа в blueprint.

circle-exclamation

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

Чтение полезной информации, такой как ID развёртывания, IP-адрес сервера, расположение сервера и многое другое; через доступ к внедрённым переменным окружения. Каждое развёртывание автоматически включает:

Проверьте, является ли текущий экземпляр игровым клиентом или сервером проверив, установлена ли переменная Edgegap:

Профилирование серверов

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

Вы также можете использовать существующие инструменты профилирования Unreal Engine с Edgegap:

Matchmaking

Запуск ваших развёртываний вручную, вставка URL и портов не подойдёт для живой игры.

circle-check

Оптимизация сборок серверов

Настройте разбиение ассетов, чтобы изолировать клиентские ассеты от серверных.

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

Пересмотрите свою стратегию приготовления контента (cooking).

  • Рассмотрите Cooking on the Fly (COTF)arrow-up-right чтобы отложить приготовление клиентских ассетов и ускорить сборки серверов.

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

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

chevron-rightПример .dockerignore файла для удаления лишних файлов.hashtag

Рассмотрите использование многоступенчатых сборок Docker (multi-stage Docker builds) (ссылка)arrow-up-right.

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

  • Если вы не понимаете, почему одна из команд в вашем Dockerfile вызывает ошибку, попробуйте отладить локально. Создайте новый этап непосредственно перед проблемой (добавьте второй FROM команду), используйте --target чтобы указать процессу сборки остановиться на проблемном этапе, а затем docker exec -it {container} /bin/bash чтобы войти в интерактивный терминал внутри контейнера. После этого вы можете использовать shell-команды в вашем базовом образе для дальнейшего исследования (например, top в Ubuntu).

Настройка образа сервера

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

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

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