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

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

不公平的放置 ——延迟不均,有一名玩家处于劣势:

良好放置示例 ——对所有玩家都具有响应性且公平的延迟:

该策略 尤其适合为彼此相距较远的一组玩家提供托管 (北美 vs. 欧洲,或西海岸 vs. 东海岸),预组大厅中经常会出现这种情况。
地理定位
或者, 提供玩家的纬度和经度坐标,或首选服务器位置的坐标 ,而不是依赖自动遥测。此方法需要额外的客户端地理定位实现,完全依赖游戏开发者的解决方案。
不建议将地理定位策略用于 部署 编排,除非应用对跨区域数据传输有严格的监管要求,或者无法获取玩家 IP。
要在 部署 API中使用此策略,请在部署请求中列出玩家的公网 IP 或地理坐标。
区域锁定
服务器可使用粗略概括的区域参数进行放置,方式如下:
根据玩家的元数据(玩家账户数据库)自动为玩家选择,或者
在匹配过程中由玩家选择,从而允许在较高客户端-服务器延迟下进行放置。
不建议单独使用此策略,因为它可能导致较差的网络性能。
将 区域选择作为预过滤器并与另一种策略结合使用 是更好的替代方案。
🟢 连接质量
某些游戏(以及某些玩家)比其他游戏更容易受到延迟或卡顿影响。虽然玩家报告在大规模场景下是事故或回归 bug 的绝佳指标, 但玩家可能并不深入了解网络概念 ,并且很快就会将责任归咎于工作室、网络代码或服务器。
某些问题的根因可能对玩家是隐藏的,因此工作室与托管提供商的合作至关重要。 Edgegap 的首要任务始终是提供尽可能最好的服务。
如果你收到大量玩家报告、遭遇大范围中断,或出现重复性问题,请立即通过我们平台中的支持工单联系我们。
低延迟
玩家延迟是以下数据传输延迟的组合:
物理设备—— 跨越……的物理信号 互联网网络拓扑,
主机到主机 ——由协议、传输和安全措施产生,
进程到进程 ——由客户端/服务器中的(解)封装和数据处理产生。
Edgegap 通过将服务器放置得更靠近你的玩家来降低物理延迟,从而获得更短的响应时间和更少的网络跳数。凭借遍布 17 家云和裸金属提供商的站点,你可以获得 全球各地玩家一流的延迟表现.
全球范围内的服务器和互联网覆盖(不仅限于 Edgegap)受限于以下因素:
基础设施可用性 ——某个区域的互联网连接质量可能不足,
自然因素 ——高度复杂的服务器机架大多需要稳定的环境。
高可用性
全球不同位置的服务器可用性会随时间变化,并且在一天中多次改变。Edgegap 会自动 上下扩缩 位置 按需,同时考虑:
突发流量 ——15 分钟内完成的部署,
vCPU 需求 ——每个部署需要更多 vCPU 会增加对特定位置的总体需求,
提供商供给 ——某些偏远位置可用的提供商选项更少,
机器可用性 ——某些位置可能只提供 4 vCPU 或 8 vCPU 的机器,
工作室请求 用于测试、质量保证、抢先体验、封闭测试或锦标赛。
所有应用程序的部署请求会合并起来以评估位置需求。默认情况下,所有组织具有相同的分配优先级,并且 可为需要特定硬件或位置的企业客户添加私有服务器池.
请 联系我们以规划发布,或者如果你对位置可用性有任何需求。
玩家问题解决
玩家问题可能源于服务器 bug 或提供商事故,也可能来自第三方,例如本地 ISP、游戏服务、底层库 bug、基础设施提供商或其他来源。
在排查玩家报告或事故时,请考虑以下因素:
区域性问题:
本地互联网服务提供商(ISP)可能正在暂时处理事故,
某些区域(例如中国、俄罗斯)可能因地区性制裁而受限,
缓存级别 ——Edgegap 将优先在已缓存的位置快速部署:
最长部署时间 ——由于初始化过程缓慢且繁重,部署可能失败:
查看 应用与版本 要增加超时时间,
将初始化步骤延后到绝对必要时再执行,
服务器镜像或集成问题.
在客户端匹配历史 UI 中显示部署 ID ,以便在排障时追踪玩家报告。
向用户通知广泛 bug、临时性问题和中断,以减轻负面情绪。
🔄 部署生命周期
Edgegap 部署会经历若干生命周期阶段,以部署状态表示。
1. 启动部署
一个用于 测试目的 的部署可通过以下方式启动:
Unreal Engine - Unreal Engine 项目的 Docker 扩展或插件,
Unity - Unity 项目的插件,
仪表板 Web 界面 - 易于使用的网页界面,用于测试服务器集成。
一个用于 实时生产环境 应通过以下方式启动:
部署 API - 服务器到服务器的定制集成(自定义扩缩容)。
保存 request_id (部署 ID)并为部署添加标签 以便日后识别和排查问题。
在使用 部署 API测试时,你可以覆盖默认 Dockerfile 的 CMD 为自定义命令。
2. 正在部署
一旦部署启动,我们的系统将快速连续执行多个步骤:
遥测——我们正在测量各可用数据中心到每位玩家的网络响应性,
部署——我们正在预留容量并准备启动你的服务器容器,
容器启动——我们正在启动容器、安装依赖并初始化,
后处理——我们正在添加日志存储、监控并完成部署。
请求过多 429 ——为确保稳定性并防止意外账单,我们对你的组织进行速率限制,限制为 40 req/s. 联系我们 以规划发布、估算启动流量并为成功做好准备。
3. 部署就绪
你的容器已完全初始化,服务器正在启动。接下来的几秒到一分钟内,你的服务器可能仍在初始化,在游戏引擎(或自定义运行时)完全准备好接受玩家连接之前,可能不会响应玩家请求。
一旦部署变为就绪, 重试玩家连接直到成功,或直到预定义的客户端超时。
4. 部署错误
由于意外原因,你的部署可能在任何时间点进入错误状态。该情况更可能发生在测试你的集成或测试新的服务器构建时。
处于错误状态的部署不会收费,并会在 24 小时后自动停止。
排查步骤:
通过 我们的正常运行时间监控页面.
验证 Edgegap 服务状态
当寻求帮助时, 请包含你的部署 ID 和任何有用的细节 这样我们就能及时调查!
5. 部署已停止
我们绝不会在没有你指令的情况下停止你的服务器,以防止对玩家体验产生负面影响。你的部署可能因以下原因被停止:
通过 DELETE_URL 自停——部署在玩家离开且比赛结束后自行停止,
查看 Unreal Engine 以及 Unity 有关正确停止部署的指南,
从你的后端停止 ——你的后端使用 部署 API,
游戏最长时长 ——在你的 应用与版本 中分配的时间已过期,
私有舰队 托管你部署的主机已通过计划任务被删除。
一旦部署停止, 我们会触发优雅终止 ,方法是向你的主进程发送 SIGTERM 信号,允许一小段终止时间。时间到后,将发送 SIGKILL 信号以停止部署。
👀 可观测性
让游戏服务器与第三方互操作,并获得运维洞察。
可发现性
一旦就绪,部署将被分配一个 URL(fqdn)以及每个内部端口对应的外部端口。
使用 部署标签轻松标记你的部署 以及 部署.
来自你的游戏服务器的出站流量(到客户端或后端)从不会被阻止 或过滤。
WebSocket(WS)和安全 WebSocket(WSS)
要将基于 WebSocket 的网络代码与 Edgegap 配合使用,你有两个选择:
托管证书,无需编写任何代码即可在 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,或当托管在 私有舰队.
资源规格
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 进行延迟测量。ARBITRIUM_HOST_BEACON_PORT_TCP_EXTERNAL- 例如30456,用于通过 TCP 进行延迟测量。
结构化信息(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" ]
每个属性在单个请求中最多只能有 1 个筛选运算符。请参阅 API 参考 了解更多。
按请求中出现的顺序使用多个字段对结果进行排序:
asc 或 desc
asc 或 desc
筛选查询示例:
列出 错误中的部署 以进行故障排查并移除。
已编码 URL:
格式化后的 JSON 查询:
列出 使用过时应用版本的部署 以确认发布已完成。
已编码 URL:
格式化后的 JSON 查询:
别忘了添加 Authorization 请求头,并在其中附上您的 Edgegap API 令牌。
Webhooks 与 Postbacks
通过在您的游戏后端中接收简单的 HTTP 通知,以获知以下内容的变化 部署 通过在您的 部署 API 请求中指定一个 webhook URL。适用于:
同一部署不会同时触发 Ready 和 Error webhook。
Webhook 不会重试,因此如果您的后端由于速率限制或错误而未处理该请求,webhook 可能会丢失。仅将 webhook 用于 非关键用途或调试目的.
Webhook 观察部署生命周期,但不了解您的场景/关卡初始化状态。要观察您的场景/关卡加载进度,请在游戏服务器中实现自定义 webhook。
🚨 故障排查
在排查部署问题时:
在本地运行您的服务器以排除集成错误,
查看本页上的故障排查步骤,
通过以下方式联系我们 社区 Discord 并附上您的部署 ID。
查看 部署 查看我们关于如何应对玩家社区反馈的建议。
无法将客户端连接到服务器 - 请求超时。, 请求超时 , 连接失败 ,或 端口验证失败.
首先,请确保部署状态为 Ready,并且您的部署日志中没有运行时异常或错误。如果您的部署已停止,请在我们的 仪表板.
如果您使用的是 Mirror 网络代码,您需要将 “自动启动服务器” 在您的
NetworkManager中勾选,然后重新构建、推送并重新部署您的服务器。如果您使用的是 FishNet 网络代码,您需要启用 “在无头模式下启动” 在您的
ServerManager中勾选,然后重新构建、推送并重新部署您的服务器。如果您使用的是 Photon Fusion 2 网络代码,请确保您的服务器正在传递部署公网 IP、外部端口以及
roomCode到服务器,并在客户端的 “NeworkRunner.StartGame” 参数StartGameArgs中传递相同的房间代码。部署 ID(例如b63e6003b19f)是一个很好的选择,因为它是全局唯一的,并且客户端可以轻松访问,通过 匹配器 分配以及到 深入了解.请确保您的游戏客户端连接到 外部端口 ,该值显示在您的部署详情页面上;出于安全原因,此值始终是随机化的。
如果您在网络代码集成中使用安全 WebSocket(WSS)协议,请确保您的 应用版本 WSS 端口的端口配置已启用 TLS 升级。
您是否位于中国并正在使用 Smart Fleets?您的连接可能会被防火长城阻止。请考虑向您的舰队添加位于中国的服务器,或使用 VPN 连接。
我的部署已就绪,但之后几分钟内我仍然无法连接。
部署一旦处于 Ready 状态,您的游戏引擎初始化就会开始。此过程可能需要几秒到几分钟不等,在此期间服务器不接受玩家连接。
请考虑优化您的服务器初始化以缩短这段时间。
游戏客户端应每隔 1 秒重试连接,持续有限的一段时间(取决于您的初始化时长),之后再返回匹配。
考虑添加一个加载场景,这样服务器可以在与客户端同步状态的同时执行初始化(对于 Unreal Engine 还包括切换场景)。
我的 Meta Quest 设备抛出 HTTP 0:无法解析目标主机 .
在为 Android 目标构建 Unity 应用时,您的 Internet Access 权限可能会自动从输出的 APK 客户端构建产物中被移除。
在以下位置重新添加权限(之后需要重新构建客户端):
项目设置 / OpenXR / ⚙️ Meta Quest 支持 / 强制移除互联网权限(取消勾选)。
玩家设置 / Internet Access(设置为 require)。
我的服务器在就绪后显示 CPU 使用率 100%。
这不一定是问题,因为游戏引擎在服务器初始化期间往往会执行 CPU 密集型操作。如果 CPU 使用率在部署启动后 2-3 分钟内没有下降,您可能需要优化服务器或增加应用版本资源。
降低 tick rate 可以影响 CPU 使用率,因为服务器执行的消息操作更少。
如果您使用的是 Mirror 网络代码,您需要将 “自动启动服务器” 在您的
NetworkManager中勾选,然后重新构建、推送并重新部署您的服务器。如果您使用的是 FishNet 网络代码,您需要启用 “在无头模式下启动” 在您的
ServerManager中勾选,然后重新构建、推送并重新部署您的服务器。免费层级限制为 1.5 vCPU 和 3GB 内存(RAM)。
您可以在创建新的应用版本时增加分配的资源。您可以在我们的仪表板中复制您的应用版本,并根据需要调整这些值,而无需重新构建您的服务器或镜像。
最后更新于
这有帮助吗?

