Unreal Engine
Учитесь на практике и разверните свой первый выделенный сервер на Edgegap. К концу этого руководства вы развернёте выделенный сервер с Edgegap бесплатно.
Создание с помощью Docker Desktop — самый быстрый, простой и надёжный способ начать.
✔️ Подготовка
Установите расширение Edgegap Quickstart для Docker
Установите через Docker Desktop / Extensions / Browse или используя ссылку.

Уверены в своих сборках серверов? Перейти к Unreal Engine и Расширенные функции.
⚙️ 1. Настройка проекта
Этот метод не требует скачивания исходников 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 run для настройки локального теста:
-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.
✅ Теперь вы можете перейти к следующему шагу.
Устранение неполадок и FAQ
Не могу подключить клиентов к серверу - Превышено время ожидания запроса. , 请求超时 , 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 и созданию новой версии приложения в вашем веб-браузере. Обязательно создайте ваш портов контейнера когда будет предложено, с значениями по умолчанию.
Нашли баг и нужно пересобрать/опубликовать снова? Используйте Пересобрать из исходников чтобы Unreal Engine и Unreal Engine быстро собрать с текущими входными значениями расширения.
✅ Теперь вы можете перейти к следующему шагу.
🚀 5. Развёртывание в облаке
☑️ Теперь мы выполним финальный тест и подключим ваш Unreal Engine Editor к облачному развёртыванию. Скопируйте Host развёртывания вместо IP сервера и порт развёртывания внешнему порту, откройте консоль Unreal в игровом клиенте (тильда ~) и введите open {host}:{port} .
Устранение неполадок и FAQ
Не могу подключить клиентов к серверу - Превышено время ожидания запроса. , 请求超时 , ConnectionFailed , или Проверка порта не удалась
Сначала убедитесь, что развёртывание Ready, и в логах развёртывания нет исключений или ошибок. Если развёртывание остановилось, проверьте логи в нашей Панели управления.
Пожалуйста, проверьте, что настройка порта в сетевом коде сборки сервера совпадает с внутренним портом в вашей версии приложения. Для сборок с плагинами порт устанавливается автоматически. Вы можете изменить отображение портов, отредактировав версии приложения без пересборки. Найдите ваш протокол в интеграции сетевого кода.
Пожалуйста, убедитесь, что ваш игровой клиент подключается к внешнему порту показанном на странице сведений о развёртывании; это значение всегда будет рандомизироваться по соображениям безопасности.
Пожалуйста, убедитесь, что вы переименовали целевой файл и настроили сборки игры, как описано в шаге Unreal Engine.
Находитесь ли вы в Китае и используете Smart Fleets? Ваше соединение может быть заблокировано Великой Файрволл. Рассмотрите возможность добавления сервера, расположенного в Китае, в ваш флит или использования 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.
Я подключился, но экран полностью тёмный.
Проверьте, что у вас правильно указан Карта по умолчанию для игры установлена в Edit / Project Settings / Maps & Modes.
Проверьте, что проверка совместимости версии Unreal Engine отключена в
DefaultEngine.ini.
Моё развёртывание остановилось/перезапустилось и я больше не могу получить доступ к его логам.
В случае аварийного завершения процесса сервера из‑за исключения наша система попытается автоматически перезапустить сервер. Рассмотрите тестирование сервера локально, чтобы выявить первопричину.
Мы храним логи только на время работы развёртывания; если вы хотите просмотреть логи после остановки развёртывания, пожалуйста, интегрируйте стороннее хранилище логов.
Смотрите Развертывания чтобы узнать все причины остановки развёртывания.
Моё развёртывание остановилось автоматически через X минут.
Развёртывания Free Tier имеют ограничение в 60 минут, пожалуйста, рассмотрите возможность обновления аккаунта.
Все развёртывания будут завершены после 24 часов работы в соответствии с нашей политикой очистки серверов, для обслуживания инфраструктуры и чтобы предотвратить неожиданные расходы, если развёртывание не было корректно остановлено. Для длительно работающих серверов рассмотрите использование Приватные флоты с Сохранение состояния.
Смотрите Развертывания чтобы узнать все причины остановки развёртывания.
Что произойдёт, если игрок покинет моё развёртывание?
По умолчанию серверы не отказывают в подключениях игроков. Аутентификация игроков — задача ваших разработчиков, так как можно использовать разные методы и поставщиков аутентификации.
Игровые клиенты могут сохранять информацию о подключении локально, чтобы попытаться переподключиться в случае неожиданного падения клиента.
Чтобы позволить игрокам присоединяться к текущим играм, рассмотрите использование Подробный обзор или Сессий.
Мой сервер показывает 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.sh скрипт.
Предпочитаете управлять жизненным циклом из Unreal? Смотрите Инструменты для разработчиков для API самостопа в blueprint.
Подключите ваш Хранилище конечных точек чтобы получить логи развёртывания, иначе они будут удалены!
Внедрённые переменные
Чтение полезной информации, такой как ID развёртывания, IP-адрес сервера, расположение сервера и многое другое; через доступ к внедрённым переменным окружения. Каждое развёртывание автоматически включает:
Переменные развёртывания - автоматически предоставляемые Edgegap,
Переменные матчмейкинга - автоматически предоставляемые Edgegap при использовании Matchmaker,
Переменные версии приложения - пары ключ-значение, настраиваемые вами.
Проверьте, является ли текущий экземпляр игровым клиентом или сервером проверив, установлена ли переменная Edgegap:
Профилирование серверов
Чтобы понять и оптимизировать проблемы производительности серверов на Edgegap, изучите Развертывания, Развертывания, и другие Развертывания инструменты в вашем распоряжении.
Вы также можете использовать существующие инструменты профилирования Unreal Engine с Edgegap:
Настройте трассировку в вашем сервере Unreal Engine (встроенные и пользовательские события):
сохраните трейс на диске сервера с помощью
-tracefile, загрузите в стороннее хранилище и анализируйте офлайн,или транслируйте данные трейсинга с помощью Развертывания для внутреннего порта
1981по протоколу UDP.
Анализировать Memory Insights и Networking Insights и Unreal Engine.
Matchmaking
Запуск ваших развёртываний вручную, вставка URL и портов не подойдёт для живой игры.
Читайте больше о Matchmaking чтобы разворачивать автоматически, точно в срок, когда игроки выходят в сеть.
Оптимизация сборок серверов
Настройте разбиение ассетов, чтобы изолировать клиентские ассеты от серверных.
Изучите Техники и рекомендации по Asset Chunking от Epic.
Исключите ассеты и плагины, которые являются только клиентскими и не требуются для работы сервера.
Пересмотрите свою стратегию приготовления контента (cooking).
Рассмотрите Cooking on the Fly (COTF) чтобы отложить приготовление клиентских ассетов и ускорить сборки серверов.
Реализуйте Level Streaming, чтобы снизить нагрузку на память во время выполнения.
Если дизайн вашей игры держит игроков преимущественно вместе в одной области карты, level streaming может сократить использование памяти сервером более чем на 60% и улучшить производительность клиента!
Включайте только то, что абсолютно необходимо для работы сервера.
Копирование неиспользуемых файлов в ваших образах приводит к раздутию образа, более долгим загрузкам, медленной кэшировке и замедленному общему запуску сервера. Просмотрите предложения по оптимизации Docker-образов.
Рассмотрите использование многоступенчатых сборок Docker (multi-stage Docker builds) (ссылка).
Разделите крупные серверные зависимости в отдельный образ для повторного использования в многоступенчатых сборках. Docker будет кэшировать каждый слой и просто повторно использовать предыдущую версию, пропуская загрузку этой части, если явно не указано иначе, что сэкономит вашу пропускную способность и время ожидания завершения загрузки.
Если вы не понимаете, почему одна из команд в вашем Dockerfile вызывает ошибку, попробуйте отладить локально. Создайте новый этап непосредственно перед проблемой (добавьте второй
FROMкоманду), используйте--targetчтобы указать процессу сборки остановиться на проблемном этапе, а затемdocker exec -it {container} /bin/bashчтобы войти в интерактивный терминал внутри контейнера. После этого вы можете использовать shell-команды в вашем базовом образе для дальнейшего исследования (например,topв Ubuntu).
Настройка образа сервера
Мы также поддерживаем добавление вашего собственного Dockerfile для пользователей, которым нужен больший контроль над образами из‑за оптимизации размера сборки, лишних зависимостей или более сложного процесса запуска. Ниже мы поделимся несколькими советами и лучшими практиками «сделай сам».
Последнее обновление
Это было полезно?

