部署
了解部署及其生命周期——用于深入理解的概念和最佳实践。
🗺️ 编排
在数秒内启动新服务器,以满足容量需求,采用我们的云原生边缘计算方案。我们将服务器视为 牲畜而不是宠物 ——直接替换故障实例,而不是手动逐个维护。
你的编排选择将 影响你的 DevOps 成本、服务器成本和可扩展性.
在 Discord 联系我们 以了解混合编排选项并优化你的托管成本。
为了全面了解所有优缺点,让我们比较各种编排方法。
匹配绑定
现代工作室的黄金标准,提供 最易集成且成本效率最佳.
👍 优点
最佳成本效率——按分钟实时扩缩以满足玩家需求。
由于无区域托管,DevOps 成本最低,Edgegap 自动化处理 99% 的任务。
由于 Edgegap 公有云基础设施中有 615+ 个站点,Ping 最低。
在突发流量激增时,扩容速度最快(突发能力最强)。
最高标准的安全性和防玩家作弊能力(服务器权威)。
服务器意外崩溃对玩家的影响最小,只影响单场比赛。
👎 缺点
采用新的编排思维模型,初期需要一些上手成本。
运行超过 24 小时的服务器将被自动终止。
🧩 最适合
对延迟敏感的游戏—— 当网络代码优化无法克服高 ping 时:
第一人称射击、格斗游戏、VR 与 XR(虚拟现实与扩展现实)等……
设计上具有 对单场比赛时长的上限,
大逃杀、 PvPvE,合作射击、MOBA、体育游戏、ARPG 与地牢爬行类等……
🔎 可发现性
当有足够玩家加入时启动新游戏 匹配.
添加玩家到 用回填替换现有对局中的离开者.
让玩家浏览服务器,并从列表中选择 服务器浏览器.
Edgegap 会根据每个区域的玩家活动自动上下扩展全部 615+ 个服务器位置。为成功做好准备——无缝 在 60 分钟内扩展到 1400 万并发用户.
区域待机
传统模型,适用于 具有用户生成内容和社交 MMO 游戏的持久世界.
👍 优点
熟悉且易于理解,是久经沙场老手的老派做法。
最高标准的安全性和防玩家作弊能力(服务器权威)。
基于每月承诺的成本易于预测。
👎 缺点
更高的托管成本——每个区域都需要一个或多个空闲待机服务器(突发容量)。
更高的 DevOps 成本——每个区域都要重复扩缩、运维和维护。
玩家基数较小的区域由于连接到远方服务器而经历较高的 ping。
🧩 最适合
即使玩家离线,服务器上仍保留存有用户生成内容的持久世界。
MMO、带基地建设或物品放置的沙盒、撤离射击游戏等……
对延迟容忍的游戏—— 当不需要服务器权威的实时物理时:
移动游戏、合作游戏、TCG/CCG、回合制策略等……
异步多人游戏, 当服务器崩溃对玩家体验影响最小时:
与鬼影竞速、掠夺敌方基地、基于计时器的建造/农场游戏等……
启动过程较重的应用——当准备服务器需要几分钟时。
🔎 可发现性
让玩家浏览服务器,并从列表中选择 服务器浏览器.
查看 托管集群 关于 在 Edgegap 上自托管你的微服务和后端服务 。
点对点
将开发精力从 专用服务器 转向 用于非竞技游戏的中继网络代码.
相关主题:监听服务器、玩家主机权威、NAT 穿透。
👍 优点
最低托管成本,只需要中继服务器来解决 NAT 穿透。
最低 DevOps 成本——只需维护客户端构建和分发渠道。
服务器意外崩溃对玩家的影响最小,只影响单场比赛。
易于实现,原型开发速度快,无需任何后端开发。
👎 缺点
增加点对点网络代码开发工作量,需要并发编程技能。
Ping 最差,并且对不利网络条件(例如移动网络)最敏感。
安全性最弱,易受中间人攻击和会话劫持。
如果你不实现自定义主机迁移,主机离开时可能导致会话丢失。
🧩 最适合
合作与休闲游戏—— 当作弊不会破坏乐趣或游戏平衡时,
儿童游戏、探索游戏、冒险等……
🔎 可发现性
查看我们的 分布式中继 服务,以实现业内最佳延迟和安全性的点对点功能。
📍 服务器放置
无论你选择哪种编排方式,为一组玩家选择正确的服务器位置对于确保尽可能好的 ping 和最佳玩家体验都至关重要。了解不同的服务器放置策略,以及它们如何影响你的玩家。
你的服务器放置策略将 影响你的玩家体验、留存率和游戏评价.
Edgegap 部署在 最佳可能的位置 与可用容量,用于快速且低延迟的对局。

查看 部署 转向 实时分析服务器放置,并在大规模场景下进行。
服务器评分
服务器评分策略使用 Edgegap 的专利方法, 为每场对局单独优化服务器放置。它执行非侵入式遥测来近似每个玩家与我们服务器位置之间的网络距离,并选择能提供最佳效果的服务器:
响应性 - 平均为所有玩家提供最低 ping,
公平性 - 为所有玩家提供均衡且公平的 ping。
响应差的放置 - 服务器很远,所有玩家的 ping 都很高:

不公平的放置 - ping 不均衡,某个玩家处于劣势:

良好放置示例 - 所有玩家的 ping 响应迅速且公平:

此策略 尤其适合在彼此相距很远的玩家之间托管一组玩家 (北美 vs. 欧洲,或西海岸 vs. 东海岸),这在预组大厅中很常见。
地理定位
或者, 提供玩家的纬度和经度坐标,或首选服务器位置的坐标 ,而不是利用自动遥测。这种方法需要额外的客户端地理查询实现,完全依赖游戏开发者的方案。
不建议将地理定位策略用于 部署 编排,除非应用有严格的跨区域数据传输监管要求,或者无法获取玩家 IP。
要在 部署 API中使用此策略,请在部署请求中列出玩家的公网 IP 或地理坐标。
区域锁定
服务器可使用一个粗略概括的区域参数进行放置,方式可以是:
根据玩家元数据(玩家账户数据库)自动为玩家选择,或者
由玩家在匹配时选择,从而允许以较高的客户端-服务器延迟进行放置。
不建议仅使用此策略,因为它可能导致较差的网络性能。
将 区域选择作为预过滤器并与另一种策略结合使用 是更好的替代方案。
🟢 连接质量
有些游戏(以及某些玩家)比其他游戏更容易受延迟或卡顿影响。虽然玩家报告是大规模事件或回归漏洞的绝佳指标, 但玩家可能并不深刻理解网络概念 并且很快会将责任归咎于工作室、网络代码或服务器。
某些问题的根本原因可能对玩家不可见,因此工作室与托管提供商的协作可能至关重要。 Edgegap 的首要任务始终是提供尽可能好的服务。
如果你收到大量玩家报告、经历广泛故障或反复出现的问题,请立即通过我们平台中的支持工单联系我们。
低延迟
玩家延迟是以下之间传输数据所产生的延迟总和:
物理设备—— 物理信号跨越 互联网网络拓扑,
主机到主机 ——由协议、传输和安全措施产生,
进程到进程 ——由客户端/服务器中的数据打包(或解包)和处理产生。
Edgegap 通过将服务器放置在更靠近玩家的位置来减少物理延迟,从而获得更短的响应和更少的网络跳数。凭借遍布 17 家云和裸金属提供商的站点,你将获得 全球任何地方玩家的同类最佳 ping.
由于以下因素,全球服务器和互联网覆盖(不只是 Edgegap)都有限:
基础设施可用性 - 某区域的互联网连接质量可能不足,
自然因素 - 高度复杂的服务器机架大多需要稳定的环境。
高可用性
世界各地不同位置的服务器可用性会随时间变化,一天中会多次变更。Edgegap 会自动 上下扩展 位置 按需,考虑:
突发流量 - 在 15 分钟内完成的部署,
vCPU 需求 - 每次部署所需的 vCPU 更多,会增加特定位置的总体需求,
提供商供给 - 一些偏远位置可用的提供商选项更少,
机器可用性 - 某些位置可能只提供 4 vCPU 或 8 vCPU 的机器,
工作室请求 用于测试、质量保证、抢先体验、封闭测试或锦标赛。
所有应用的部署请求都会合并以评估位置需求。默认情况下,所有组织具有相同的分配优先级,且 可为需要特定硬件或位置的企业客户添加私有服务器池.
请 联系我们以规划发布,或者如果你对位置可用性有任何需求。
玩家问题解决
玩家问题可能源于服务器错误或提供商事故,也可能来自本地 ISP、游戏服务、底层库中的错误、基础设施提供商或其他来源等第三方。
在排查玩家报告或事故时,请考虑以下因素:
区域性问题:
本地互联网服务提供商(ISP)可能正在短暂处理事故,
某些地区(例如中国、俄罗斯)可能由于本地化制裁而受到限制,
缓存级别 - Edgegap 会优先在已缓存的位置进行快速部署:
最大部署时间 - 由于初始化过程缓慢且繁重,部署可能失败:
查看 应用和版本 要增加超时期限,
将初始化步骤延后到绝对必要时再执行,
服务器镜像或集成问题.
在客户端的对局历史 UI 中显示部署 ID 以便在排查时追踪玩家报告。
向用户通知广泛存在的漏洞、临时问题和故障,以减轻负面情绪。
🔄 部署生命周期
Edgegap 部署会经历多个生命周期阶段,由部署状态表示。
1. 启动部署
一个用于 测试目的 的部署可以通过以下方式启动:
Unreal Engine - Unreal Engine 项目的 Docker 扩展或插件,
Unity - Unity 项目的插件,
仪表板 Web UI - 用于测试服务器集成的易用网页界面。
一个用于 线上生产环境 应通过以下方式启动:
部署 API - 服务器到服务器的定制集成(自定义扩缩)。
保存 request_id (部署 ID)并为部署添加标签 以便之后识别和排查问题。
在使用 部署 API测试时,你可以覆盖默认的 Dockerfile CMD 并使用自定义命令。
2. 部署中
一旦部署启动,我们的系统会连续快速执行一系列步骤:
遥测——我们正在测量从可用数据中心到每个玩家的网络响应能力,
部署——我们正在预留容量并准备启动你的服务器容器,
容器启动——我们正在启动容器、安装依赖并初始化,
后处理——我们正在添加日志存储、监控并完成部署。
请求过多 429 - 为确保稳定性并防止意外账单,我们对你的组织进行速率限制,限制为 40 次请求/秒. 联系我们 以规划发布、估算上线流量并为成功做好准备。
3. 部署就绪
你的容器已完全初始化,你的服务器现在正在启动。在几秒到一分钟内,你的服务器可能仍在初始化,在游戏引擎(或自定义运行时)完全准备好接受玩家连接之前,可能不会响应玩家请求。
一旦部署进入就绪状态, 重试玩家连接直到成功,或直到预定义的客户端超时。
4. 部署错误
由于意外原因,你的部署可能在任何时候进入错误状态。这更可能发生在测试集成或测试新的服务器构建时。
处于错误状态的部署不会收费,并会在 24 小时后自动停止。
故障排查步骤:
通过 我们的正常运行监控页面.
验证 Edgegap 服务状态。尝试使用 Docker Desktop 在本地测试你的服务器容器,以排除 Edgegap 问题。
在寻求帮助时, 请包含你的部署 ID 和任何有用的细节 以便我们能及时调查!
5. 部署已停止
我们绝不会在没有你指示的情况下停止你的服务器,以避免对玩家体验造成负面影响。你的部署可能因以下原因被停止:
通过 DELETE_URL 自停——在玩家离开且对局结束后,部署自行停止,
查看 Unreal Engine 和 Unity 关于正确停止部署的指南,
从你的后端停止 - 你的后端使用 部署 API,
游戏最长时长 - 你在 应用和版本 中分配的时间已到期,
私有舰队 通过计划任务删除了运行你部署的主机。
一旦部署停止, 我们会触发优雅终止 ,通过向你的主进程发送 SIGTERM 信号,允许短暂的终止期。期满后,会发送 SIGKILL 信号以停止部署。
👀 可观测性
允许游戏服务器与第三方互操作并获得运维洞察。
可发现性
一旦就绪,部署会被分配一个 URL(fqdn)以及每个内部端口对应的外部端口。
使用 部署标签(最多 40 个字符)来轻松标记你的部署 和 部署.
来自你的游戏服务器的出站流量(到客户端或后端)绝不会被阻止 或过滤。
WebSocket(WS)与安全 WebSocket(WSS)
要在 Edgegap 中使用基于 websocket 的网络代码,你有两个选择:
托管证书,1 分钟内即可设置完成,无需编写任何代码:
配置你的 应用和版本 转向 使用 WebSocket(WS)并启用 TLS 升级,
使用 Edgegap URL 连接客户端(例如
https://5fa53fa00a57.pr.edgegap.net/)
自托管证书,如果你想使用自己的自定义域名:
配置你的 应用和版本 转向 使用安全 WebSocket(WSS),
使用自定义 DNS 记录配置你自己的 TLS 证书流程(例如在 Cloudflare).
未捕获的服务器异常将导致部署的容器重启并使 TLS 安全失效。在这种情况下, 停止你的服务器 和 将玩家重新匹配到新的部署. 服务器状态可能会丢失.
注入变量
游戏服务器通常需要额外信息,例如服务器 IP、内部端口值等。注入只读环境变量是一种可靠且与云无关的参数传递方式。
使用以下方式获取变量值 在 C# 中使用 GetEnvironmentVariable 或 在 C++ 中使用 GetEnvironmentVariable.
自定义变量
为每个部署定义最多 20 个自定义变量,每个变量最多包含 4KB 的字符串数据。
避免使用保留名称(见下),否则你的自定义变量会被覆盖!
通过读取 Edgegap 注入到你服务器中的变量来访问重要信息:
标识符
ARBITRIUM_REQUEST_ID- 例如f68e011bfb01.唯一部署 ID,也称为请求 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.以逗号分隔的用户定义部署标签, 便于搜索和过滤.
ARBITRIUM_PRIVATE_FLEET_ID- 例如PUBLIC_CLOUD,或在以下环境中托管时的舰队 ID: 私有舰队.
资源规格
ARBITRIUM_HOST_IN_PRIVATE_FLEET- 例如false,指示是否托管于 私有舰队.ARBITRIUM_HOST_BASE_CLOCK_FREQUENCY- 例如2000,处理器频率,单位为 MHz。ARBITRIUM_DEPLOYMENT_VCPU_UNITS- 例如256,分配的 vCPU 单元(1024 = 1 vCPU)。ARBITRIUM_DEPLOYMENT_MEMORY_MB- 例如512,分配的内存,单位为 MB(1024 = 1 GB)。
生命周期管理
ARBITRIUM_DELETE_URL- 例如https://api.edgegap.com/v1/self/stop/9f511e17/660.可由部署调用, 部署将被优雅停止.
需要唯一的一次性
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,你的网络代码传输协议。
示例假设你已将端口命名为 gameport (默认)。 每个端口都会额外添加一组已清理的 应用和版本 变量: @Super Port! ⇒ ARBITRIUM_PORT_SUPER_PORT_INTERNAL .
ARBITRIUM_HOST_BEACON_PUBLIC_IP- 例如139.177.198.69,最近信标的公网 IP。ARBITRIUM_HOST_BEACON_PORT_UDP_EXTERNAL- 例如30199,用于通过 UDP 测量 ping。ARBITRIUM_HOST_BEACON_PORT_TCP_EXTERNAL- 例如30456,用于通过 TCP 测量 ping。
结构化信息(字符串形式的 JSON)
环境变量 以字符串化 JSON 存储,请使用 SDK 或自定义方法进行解析。
仪表板监控
我们的 仪表板 提供用于监控你的服务器可扩展性并协助运维的工具。
分析
在侧边栏菜单中找到 分析仪表板 ,位于“服务器托管与编排”类别下。
🌟 升级到按需付费层级 以解锁详细的服务器性能指标和洞察:
通用洞察: 监控版本发布,显示每个版本的实时服务器数量 + 资源使用概览,
CPU 洞察:排查因处理器密集型操作导致的卡顿服务器,
内存洞察:缓解因超出分配内存而导致的服务器重启,
网络洞察: 检测低效的网络模式并优化网络代码。

部署地图
在地图上预览部署位置、可用位置和预估的玩家位置:

部署平衡点
预览部署平衡点热力图,并按 应用和版本进行筛选。平衡点是与给定部署中的每位玩家具有相同网络接近度的大致位置:

部署日志
部署日志显示有关 部署:

容器日志
如遇问题,或在调试时检查你的游戏服务器日志:

一旦部署停止,容器日志将被删除。 设置 第三方 S3 日志存储 以保存日志。
容器指标
查看容器指标(处理器、内存、网络)以:
识别常见连接问题,当 部署,
检测导致资源使用激增的低效实现模式,
在特定场景下定位低效的资源使用,
验证优化期间服务器资源使用的变化,
对服务器初始化时的资源消耗和持续时间进行基准测试。
历史指标以 1 分钟时间周期显示平均值,免费层可用。
🌟 升级到按需付费层级 以解锁 1 秒时间间隔的精确指标。

联系我们 在你的发布前请求大规模发布的实时托管支持。
上下文与状态
可通过 JSON 格式检索额外的部署信息:
上下文 API(来自部署)需要 Context API 令牌,而状态 API 使用你的 Edgegap 令牌。
筛选部署
为了快速搜索所有部署,你可以 使用我们的仪表板:

使用 API 列出部署 并通过后端集成应用筛选条件:
于 或 nin
[ "7e709a0d8efd", "4ba353100b4b" ]
于 或 nin
[ "tagA", "tagB" ]
于 或 nin
[ "my-app", "my-other-app" ]
于 或 nin
[ "1.0.0", "prod" ]
于 或 nin
[ "fleet-eu", "fleet-us" ]
ilike
"%-eu%"
于 或 nin
[ "alpha-north-america-95fab093" ]
ilike
"%north-america%"
每个属性在单个请求中最多只能有 1 个筛选运算符。更多信息请参见 API 参考 。
按多个字段排序,顺序与它们在请求中出现的顺序一致:
asc 或 desc
available_session_sockets
asc 或 desc
示例筛选查询:
列出 错误状态的部署 以进行排查和移除。
编码后的 URL:
格式化后的 JSON 查询:
列出 具有过期 App 版本的部署 以确认发布已完成。
编码后的 URL:
格式化后的 JSON 查询:
别忘了添加 Authorization 请求头,并在请求中携带你的 Edgegap API 令牌。
Webhook 与回传
通过在你的 部署 中指定 webhook URL,接收游戏后端中关于 部署 API 请求变更的简单 HTTP 通知。适用于:
就绪和错误 webhook 永远不会针对同一部署同时触发。
Webhook 不会重试,因此如果你的后端由于限流或错误而未处理该请求,webhook 可能会丢失。仅将 webhook 用于 非关键用例或调试目的.
Webhook 会监控部署生命周期,但不了解你的场景/关卡初始化状态。若要监控场景/关卡的加载进度,请在游戏服务器中实现自定义 webhook。
🚨 故障排除
在排查部署问题时:
中没有错误,并在本地运行服务器以排除集成 bug,
查看本页上的故障排除步骤,
通过 社区 Discord 联系我们,并附上你的部署 ID。
查看 部署 了解我们关于如何处理玩家社区反馈的建议。
无法将客户端连接到服务器 - 请求超时。, 请求超时 , ConnectionFailed ,或 端口验证失败.
首先,请确保部署已就绪,并且你的部署日志中没有运行时异常或错误。如果你的部署已停止,请在我们的中查看日志 仪表板.
如果你使用的是 Mirror 网络代码,则需要启用 “Auto Start Server” 在你的
NetworkManager中选中,然后重新构建、推送并重新部署你的服务器。如果你使用的是 FishNet 网络代码,则需要启用 “Start on Headless” 在你的
ServerManager中选中,然后重新构建、推送并重新部署你的服务器。以及 请接着验证你的服务器构建中网络代码设置里的端口配置是否与你的App 版本 请接着验证你的服务器构建中网络代码设置里的端口配置是否与你的 中的内部端口一致。你可以通过编辑
而无需重新构建来更改端口映射。请在你的网络代码集成中找到你的协议。 外部端口 显示在你的部署详情页面上,此值出于安全原因始终会被随机化。
如果你在网络代码集成中使用的是安全 WebSocket(WSS)协议,请确保你的 请接着验证你的服务器构建中网络代码设置里的端口配置是否与你的 WSS 端口的端口配置已启用 TLS 升级。
你是否位于中国并正在使用 智能舰队?你的连接可能会被防火长城阻止。请考虑在你的舰队中添加位于中国的服务器,或使用 VPN 连接。
我的部署已就绪,但之后几分钟我仍无法连接。
一旦部署就绪,你的游戏引擎初始化就会开始。此过程可能持续数秒到数分钟,在此期间服务器不接受玩家连接。
请考虑优化服务器初始化以缩短这段时间。
游戏客户端应以 1 秒间隔重试连接一段有限时间(取决于你的初始化时长),之后它们会返回匹配队列。
建议添加一个加载场景,这样服务器就能在与客户端同步状态的同时进行初始化(在虚幻引擎中还可执行 travel)。
我的 Meta Quest 设备报错 HTTP 0: 无法解析目标主机 .
当为 Android 目标构建 Unity 应用时,你的 Internet Access 权限可能会在输出的 APK 客户端构建产物中被自动移除。
重新添加这些权限(之后需要重新构建客户端):
项目设置 / OpenXR / ⚙️ Meta Quest Support / Force Remove Internet Permissions(取消勾选)。
Player Settings / Internet Access(设置为 require)。
我的服务器在就绪后显示 100% CPU 使用率。
这可能不是问题,因为游戏引擎通常会在服务器初始化期间执行 CPU 密集型操作。如果在部署开始后 2-3 分钟内 CPU 使用率没有下降,你可能需要优化服务器或增加应用版本资源。
降低 tick 速率会影响 CPU 使用率,因为服务器执行的消息传递操作更少。
如果你使用的是 Mirror 网络代码,则需要启用 “Auto Start Server” 在你的
NetworkManager中选中,然后重新构建、推送并重新部署你的服务器。如果你使用的是 FishNet 网络代码,则需要启用 “Start on Headless” 在你的
ServerManager中选中,然后重新构建、推送并重新部署你的服务器。免费层限制为 1.5 vCPU 和 3GB 内存(RAM)。
你可以在创建新的 App 版本时增加分配的资源。你可以在我们的仪表板中复制你的 App 版本,并根据需要调整这些值,而无需重新构建服务器或镜像。
最后更新于
这有帮助吗?

