u虚幻引擎(Unreal Engine)

通过实践学习并在 Edgegap 部署你的第一个专用服务器。在本指南结束时,你将已在 Edgegap 上免费部署了一个专用服务器。

使用 Docker Desktop 构建是入门最快、最简单且最可靠的方法。

✔️ 准备工作

chevron-right安装 Edgegap 快速入门 Docker 扩展arrow-up-righthashtag
circle-info

对你的服务器构建很有把握? 跳到 虚幻引擎(Unreal Engine)高级功能.

⚙️ 1. 配置项目

circle-info

此方法不需要下载 Unreal Engine 源代码或从源码构建!

☑️ 首先 验证你的 Unreal Engine 版本 - 已从你的项目文件预填的值。

☑️ 输入 GitHub 用户名和 PAT 来自 虚幻引擎(Unreal Engine),以便从 GitHub 下载依赖项。

🔧 2. 构建游戏服务器

现在我们将构建和烹制(cook)你的项目,并将其打包成易于重用的 docker 镜像。

☑️ 你可以配置以下选项(或保持默认):

  • 镜像名称 是你选择的唯一标识符,用于在交付前标记你的服务器构建。

    • 通常,这会包含你的游戏名称——例如“my-game-server”。

  • 镜像标签 是指向你镜像特定版本的标识符。

    • 术语“构建产物”(build artifact)有时用于指代镜像的特定版本。

    • 时间戳是标记的一个很好的选项,例如: 2024.01.30-16.23.00-UTC (默认)。

☑️ 构建项目 一旦你对配置满意即可。完成此步骤将会在本地 Docker 客户端中添加一个包含你的 Linux 游戏服务器可执行文件的新镜像。

✅ 你现在可以继续下一步。

🧪 3. 在本地测试服务器

☑️ 选择你希望在本地运行的镜像标签 (远程镜像将被下载)。可选地,还可以提供更多 docker run 参数arrow-up-right 以自定义本地测试:

  • -p 7777:7777/udp - 这是你的本地容器 端口映射,

  • -e ARBITRIUM_PORT_GAMEPORT_INTERNAL=7777 是一个 环境变量 模拟真实的 Edgegap 部署,告诉你的游戏服务器用于监听玩家连接的内部端口。

☑️ 一旦你对配置满意,点击 启动本地服务器。完成此步骤将会导致 在你的开发机器上启动一个新容器

☑️ 现在是将你的 Unreal Engine 编辑器(PIE)游戏客户端连接到本地服务器容器的时候了。使用打开控制台 ~ (波浪号)并使用 open <ip>:<port> 连接:

  • ip = localhost127.0.0.1 (在大多数情况下等效),

  • 端口 = Docker GUI 中容器的随机外部端口值。

✅ 你现在可以继续下一步。

chevron-right故障排除与常见问题hashtag

无法将客户端连接到服务器 - 请求超时。 , 请求超时 , 连接失败 ,或 端口验证失败

  • 首先,确保容器已启动,并且日志中没有运行时错误。

  • 请验证你在 docker run 命令中使用的端口值是否匹配。

  • 请确保你的游戏客户端正在连接到 外部端口 ,该值显示在你的容器详情页面上,出于安全原因此值将始终是随机的。

  • 请确保你已按步骤中所述重命名目标文件并配置了游戏构建 ⚙️ 1. 配置项目.


我的容器已启动,但之后几分钟内无法连接。

  • 一旦容器启动,游戏引擎初始化就会开始。此过程可能需要数秒到数分钟不等,在此期间服务器不会接受玩家连接。

  • 请考虑优化服务器初始化以缩短该时间。

  • 游戏客户端应以 1 秒间隔重试连接,持续有限时间(取决于你的初始化时长),之后应返回匹配流程。

  • 可以考虑添加加载场景,让服务器在初始化(以及在 Unreal Engine 情况下进行 travel)时与客户端同时执行初始化并同步状态。


警告:无法为绑定地址创建套接字

  • 请通过 Fab 资源商店安装 Epic 的 Steam 子系统插件。

  • 当使用从 GitHub 下载的 SteamCore 源版本的 Edgegap Integration Kit (EGIK) 时,由于 Epic Games 的插件分发政策,不包含 Epic 的 Steam 子系统插件。


我已连接但屏幕完全是黑的。

  • 验证你是否已正确设置 游戏默认地图 位于 编辑 / 项目设置 / 地图与模式.

☁️ 4. 发布到 Edgegap

☑️ 选择一个应用名称 用于在 Edgegap 上标记和分组相似的镜像。

☑️ 选择你希望发布的镜像标签上传镜像。完成此步骤将把你的服务器镜像上传到 Edgegap Registry,并在你的网页浏览器中创建一个新的 应用版本确保在提示时创建你的 端口映射使用默认值.

circle-check

✅ 你现在可以继续下一步。

🚀 5. 部署到云端

☑️ 现在我们将执行最终测试并 将你的 Unreal Engine 编辑器连接到云端部署。获取你的 部署主机 以替代服务器 IP,并获取部署的 外部端口,在游戏客户端中打开 Unreal 控制台(波浪号 ~)并输入 open {host}:{port} .

chevron-right故障排除与常见问题hashtag

无法将客户端连接到服务器 - 请求超时。 , 请求超时 , 连接失败 ,或 端口验证失败


吗?你的连接可能会被防火长城阻断。请考虑向你的舰队添加位于中国的服务器,或使用 VPN 进行连接。

  • 我的部署已就绪,但之后几分钟内无法连接。

  • 请考虑优化服务器初始化以缩短该时间。

  • 游戏客户端应以 1 秒间隔重试连接,持续有限时间(取决于你的初始化时长),之后应返回匹配流程。

  • 可以考虑添加加载场景,让服务器在初始化(以及在 Unreal Engine 情况下进行 travel)时与客户端同时执行初始化并同步状态。


警告:无法为绑定地址创建套接字

  • 请通过 Fab 资源商店安装 Epic 的 Steam 子系统插件。

  • 一旦部署处于就绪状态,游戏引擎初始化就会开始。此过程可能需要数秒到数分钟不等,在此期间服务器不会接受玩家连接。


我已连接但屏幕完全是黑的。

  • 验证你是否已正确设置 游戏默认地图 位于 编辑 / 项目设置 / 地图与模式.

  • 当使用从 GitHub 下载的 SteamCore 集成包(SIK)源版本与 Edgegap Integration Kit (EGIK) 一起时,由于 Epic Games 的插件分发政策,不包含 Epic 的 Steam 子系统插件。 验证 已在 DefaultEngine.ini.


中禁用 Unreal Engine 版本兼容性检查


以发现停止部署的所有原因。

  • 我的部署在 X 分钟后自动停止。

  • 免费套餐部署有 60 分钟限制,请考虑升级你的账户。 私有舰队 根据我们的服务器清理政策,所有部署在运行 24 小时后将被终止,用于基础设施维护,并防止在部署未正确关闭时产生意外费用。对于长期运行的服务器,请考虑使用 持久化.

  • 集成第三方日志存储 部署 查看



会话

  • 我的服务器在就绪后显示 CPU 利用率 100%。

  • 这可能不是问题,因为游戏引擎在服务器初始化期间往往会执行大量 CPU 密集型操作。如果在部署开始后 2-3 分钟内 CPU 使用率仍未下降,你可能需要优化服务器或增加应用版本的资源。

  • 降低 tick 率可以通过处理更少的消息来帮助控制 CPU 使用率。

  • 免费套餐的限制为 1.5 vCPU 和 3GB 内存(RAM)。


在创建新的应用版本时你可以增加分配的资源。你可以在我们的控制面板中复制你的应用版本并根据需要调整这些值,而无需重新构建服务器或镜像。 我的部署正在反复重启并显示错误

  • OOM 杀死

  • 降低 tick 率可以通过处理更少的消息来帮助控制 CPU 使用率。

  • 免费套餐的限制为 1.5 vCPU 和 3GB 内存(RAM)。


这是由于超出分配的内存量导致的。请考虑通过对象池、压缩或移除场景中不需要的对象来优化内存使用。

  • 有时,我的服务器内存(RAM)使用会飙升到很高,这会是问题吗?

  • 只要你保持在分配的应用版本内存额度内,这不是问题。 我的部署正在反复重启并显示错误 超出分配的应用版本内存额度将导致


(见上文)。

  • 同一台机器上运行的其他服务器会影响我的服务器性能吗?

不会,我们的平台确保分配的资源不会被其他工作室或共享基础设施上的其他服务器使用。使用 Edgegap,不会有“噪声邻居”的问题。

👉 后续步骤

停止部署 了解各种方法来 停止部署

在比赛结束且玩家离开后。 如果你按照本指南并使用我们的 Docker 扩展构建,你可以简单调用方法 FGenericPlatformMisc::RequestExit

。我们已在打包的镜像中添加了一个脚本来管理你的服务器进程,它会自动执行优雅的部署关闭。 要自定义服务器生命周期管理,请修改我们的 示例arrow-up-right StartServer.sh

circle-info

脚本。 开发者工具 更喜欢从 Unreal 管理生命周期?请参见

circle-exclamation

以获取你的部署日志,否则它们将被删除!

注入的变量

应用版本变量 - 由你可配置的自定义键值对。

// 服务器代码

服务器性能分析 部署, 部署要在 Edgegap 上理解和优化服务器性能问题,请探索 部署 以及更多可用的

工具。

网络洞察

匹配服务

circle-check

优化服务器构建

配置资源分块以将仅客户端资源与服务器资源隔离。

排除仅客户端使用且服务器运行不需要的资源和插件。

以延迟烹制客户端资源并加快服务器构建。

减少超过 60%,并提升客户端性能!

chevron-right查看 Docker 镜像优化建议 示例 .dockerignorehashtag

**/Packaged/* 考虑使用arrow-up-right.

  • 多阶段 Docker 构建(链接)

  • 将大型服务器依赖项分离到单独的镜像以在多阶段构建中重用。Docker 会缓存每一层并在未特别指示上传此部分时重用前一版本并跳过上传,从而为你节省带宽和等待上传完成的时间。 如果你不确定为什么某个 Dockerfile 命令抛出错误,请尝试在本地调试。在问题发生前创建一个新阶段(添加第二个 FROM 命令),使用 --target 指示构建过程在有问题的阶段停止,然后 docker exec -it {container} /bin/bash 进入容器内的交互终端。随后,你可以在你的基础镜像中使用 shell 命令进一步调查(例如在 Ubuntu 上使用 top

)。

自定义服务器镜像:你也可以添加自定义 Dockerfile,以便对镜像有更多控制,例如进行构建大小优化、移除多余依赖项或需要更复杂的启动流程。下面分享一些“自己动手”的提示和最佳实践。

最后更新于

这有帮助吗?