> For the complete documentation index, see [llms.txt](https://docs.edgegap.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.edgegap.com/zh/learn/bian-pai/deployments.md).

# 部署

了解部署及其生命周期——深入理解的概念与最佳实践。

## 🗺️ 编排

在几秒钟内启动新服务器，以满足容量需求，这得益于我们的云原生边缘计算方法。我们将服务器视为 [牲口而不是宠物](https://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/) ——直接替换故障实例，而不是逐个手动修复。

{% hint style="info" %}
你的编排选择将 **影响你的 DevOps 成本、服务器成本和可扩展性**.
{% endhint %}

{% hint style="success" %}
[到 Discord 联系我们](https://discord.gg/MmJf8fWjnt) ，了解混合编排选项并优化你的托管成本。
{% endhint %}

为了全面了解所有优缺点，让我们比较各种编排方法。某些游戏会根据游戏循环设计使用多种编排方式。

### 与匹配绑定

短生命周期（限时）服务器会在比赛结束时缩容，从而提供 **最佳性价比**.

会话通常通过一个 [匹配](/zh/unity/pi-pei.md) 服务自动化完成，该服务使用严格规则即时部署服务器，并可选地允许将正在进行中的服务器填充到 [提升匹配填充率](https://edgegap.com/blog/how-session-fill-rate-affects-your-multiplayer-hosting-costs).

👍 **优势**

* 最佳成本效率——实时扩缩容以按分钟满足玩家需求。
* 由于采用无地域托管，DevOps 成本最低，Edgegap 自动化处理 99% 的任务。
* 由于 Edgegap 公有云基础设施拥有 615+ 个站点，延迟最低。
* 在意外流量激增时扩容速度最快（爆发能力最强）。
* 最高标准的安全性和防作弊防护（服务器权威）。
* 服务器意外崩溃对玩家的影响最小，只会影响一场比赛。

👎 **缺点**

* 采用新的编排思维模型起初需要一定的适应成本。
* 运行超过 24 小时的服务器将被自动终止。

🧩 **最适合**

* 对延迟敏感的游戏—— **当网络代码优化无法克服高 ping 时：**
  * 第一人称射击、格斗游戏、VR 与 XR（虚拟与扩展现实）……
* 设计上具有 **比赛时长上限的游戏**,
  * 大逃杀、 PvPvE[^1]，合作射击、MOBA、体育游戏、ARPG 与地牢爬行类游戏……

{% hint style="info" %}
Edgegap 会根据各区域的玩家活跃度自动上调/下调全部 615+ 个服务器位置。为成功做好准备——无缝 [在 60 分钟内扩展到 1400 万并发用户](https://edgegap.com/resources/performance-benchmark).
{% endhint %}

### 区域待命

持久世界和社交 MMO 游戏 **服务器寿命通常超过单个玩家会话**.

会话通常通过一个 [Server Browser](/zh/learn/server-browser.md) 根据玩家偏好（按区域自动化或自定义搜索）分配，并基于区域容量进行横向部署预扩容。

👍 **优势**

* 熟悉且易于理解，是饱经战火的老玩家们偏爱的老派做法。
* 最高标准的安全性和防作弊防护（服务器权威）。
* 基于月度承诺，成本很容易预测。

👎 **缺点**

* 托管成本更高——每个区域都需要一台或多台空闲待命服务器（爆发容量）。
* DevOps 成本更高——每个区域都要重复进行扩缩容、运维和维护。
* 玩家基数较小的区域由于需要连接远处服务器而出现高 ping。

🧩 **最适合**

* 即使玩家离线，服务器上仍保存用户生成内容的持久世界。
  * MMO、带基地建造或物体放置的沙盒游戏、撤离射击游戏……
* 可容忍延迟的游戏—— **当不需要服务器权威的实时物理时**:
  * 移动游戏、合作游戏、TCG/CCG、回合制策略游戏……
* 异步多人游戏， **服务器崩溃对玩家体验影响最小时：**
  * 与幽灵竞速、掠夺敌方基地、基于计时器的建造/农场游戏……
* 初始化过程较重的应用——当准备服务器需要数分钟时。

### 点对点

将开发重点从 ~~专用服务器~~ 转向 **用于非竞技游戏的中继网络代码**.

相关主题：监听服务器、玩家主机权威、NAT 穿透。

👍 **优势**

* 托管成本最低，只需中继服务器即可解决 NAT 穿透问题。
* DevOps 成本最低——只需维护客户端构建和分发渠道。
* 服务器意外崩溃对玩家的影响最小，只会影响一场比赛。
* 实现简单、原型开发速度快，无需任何后端开发。

👎 **缺点**

* 点对点网络代码的开发工作量增加，需要并发编程技能。
* Ping 最差，也最容易受不利网络条件影响（例如移动网络）。
* 安全性最弱，容易遭受中间人攻击和会话劫持。
* 如果主机离开，存在会话掉线风险，除非你实现自定义主机迁移。

🧩 **最适合**

* 合作与休闲游戏—— **当作弊不会削弱乐趣或破坏游戏时**,
  * 儿童游戏、探索游戏、冒险游戏……

{% hint style="success" %}
查看我们的 [分布式中继](https://docs.edgegap.com/docs/distributed-relay-manager) 用于让点对点服务以一流的延迟和安全性运行。
{% endhint %}

## 📍 服务器部署位置

无论你选择哪种编排方式，为一组玩家选择合适的服务器位置都至关重要，这能确保尽可能低的 ping 和最佳的玩家体验。了解不同的服务器部署策略，以及它们如何影响你的玩家。

{% hint style="info" %}
你的服务器部署策略将 **影响玩家体验、留存率以及你的游戏评价**.
{% endhint %}

{% hint style="success" %}
**Edgegap 部署在** [**最合适的位置**](#server-score) **且有可用容量**，以实现快速且低延迟的匹配。
{% endhint %}

<figure><img src="/files/4bbd86866f8edd9f4bfeb4b9cc0003effb84d40d" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
查看 [#deployment-balance-points](#deployment-balance-points "mention") 转向 **实时分析服务器部署位置**，并可规模化运行。
{% endhint %}

### 服务器评分

服务器评分策略使用 Edgegap 获得专利的方法，该方法 **为每场比赛分别优化服务器部署位置**。通过非侵入式遥测估算每位玩家到我们服务器位置的网络距离，并选择可提供最佳以下指标的服务器：

* **响应速度** ——平均为所有玩家提供最低 ping，
* **公平性** ——为所有玩家提供均衡且公平的 ping。

{% hint style="success" %}
我们的 [匹配器](/zh/learn/pi-pei.md) 默认使用 **服务器评分策略，以确保最佳体验**。若要将此策略用于 [部署 API](https://docs.edgegap.com/api/#tag/Deployments)，请在部署请求中输入玩家的公共 IP 或地理坐标。
{% endhint %}

**响应不佳的部署位置** ——服务器距离过远，所有玩家的 ping 都很高：

<figure><img src="/files/480adb76441b89cc8235b512df53d297ccf69799" alt=""><figcaption></figcaption></figure>

**不公平的部署位置** ——ping 不均衡，一名玩家处于劣势：

<figure><img src="/files/f0c354732f377859eb8bb21ee7a65890d7a4a297" alt=""><figcaption></figcaption></figure>

**良好部署示例** ——为所有玩家提供响应快且公平的 ping：

<figure><img src="/files/23df4eaec66a3c38a2ebd23331fab507885dd961" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
此策略 **对于托管彼此相距较远的一组玩家特别有效** （北美对欧洲，或西海岸对东海岸），这在预组队房间中很常见。
{% endhint %}

### 地理定位

或者， **提供目标纬度和经度坐标，或首选区域中 ping 信标的公共 IP 地址**。这种方式需要额外的客户端地理位置查找实现，完全依赖开发者的方案。

{% hint style="warning" %}
不建议将此策略用于 [#match-bound](#match-bound "mention") 编排，除非应用程序对区域间数据传输有严格的监管要求，或者玩家 IP 不可用。
{% endhint %}

{% hint style="success" %}
或者，让玩家 **从列表中选择一个持久的（始终在线）服务器** 带有 [Server Browser](/zh/learn/server-browser.md).
{% endhint %}

### 区域锁定

出于合规、技术或运营原因，某些设计或受众并不打算跨越到相邻区域。请考虑 [Server Browser](/zh/learn/server-browser.md) 与 [区域扩展策略](/zh/learn/server-browser.md#automated-scaling).

{% hint style="warning" %}
不建议将此策略用于 [#match-bound](#match-bound "mention") 编排，除非应用程序对区域间数据传输有严格的监管要求，或者玩家 IP 不可用。
{% endhint %}

## 🟢 连接质量

某些游戏（以及某些玩家）对延迟或卡顿比其他游戏更敏感。虽然玩家反馈在大规模场景下是识别事故或回归 bug 的绝佳指标， **玩家可能并不理解网络概念** 并且很快就会把责任归咎于工作室、网络代码或服务器。

某些问题的根本原因可能对玩家不可见，因此工作室与托管提供商的协作可能至关重要。 **Edgegap 的首要任务始终是提供尽可能好的服务。**

如果你收到了大量玩家反馈、正在经历大范围故障，或问题反复出现，请立即通过我们平台中的支持工单联系我们。

{% hint style="info" %}
如果你需要帮助， [请通过 Discord 联系我们](https://discord.gg/MmJf8fWjnt)。关于实时游戏支持，请查看我们的 [工单系统](https://edgegap.atlassian.net/servicedesk/customer/portal/3).
{% endhint %}

#### 低延迟

玩家延迟是以下之间传输数据所产生延迟的综合：

* **物理设备——** 穿越 [互联网网络拓扑](https://en.wikipedia.org/wiki/Internet#Routing),
* **主机到主机** ——由协议、传输和安全措施造成，
* **进程到进程** ——由客户端/服务器中的（解）封装和数据处理造成。

Edgegap 通过将服务器放得更靠近你的玩家来减少物理延迟，从而缩短响应时间并减少网络跳数。凭借覆盖 17 家云与裸金属提供商的位置，你将获得 **世界各地玩家都能享有的一流 ping**.

全球范围内服务器和互联网覆盖（不只是在 Edgegap 上）受以下因素限制：

* **基础设施可用性** ——某一区域的互联网连接质量可能不足，
* **自然因素** ——高度复杂的服务器机架通常需要相对稳定的环境。

#### 高可用性

世界各地不同位置的服务器可用性会随时间变化，一天内会多次变动。Edgegap 会自动 **按需扩容/缩容** 位置 **按需**，考虑以下因素：

* **突发流量** ——在 15 分钟内完成的部署，
* **vCPU 要求** ——每次部署所需的 vCPU 越多，对特定位置的总体需求就越高，
* **提供商供应** ——某些偏远地区可用的提供商选项更少，
* **机器可用性** ——某些位置可能只提供 4 vCPU 或 8 vCPU 的机器，
* **工作室请求** 用于测试、质量保证、抢先体验、封闭测试或锦标赛。

所有应用程序的部署请求会合并起来评估位置需求。默认情况下，所有组织具有相同的分配优先级，且 **可为需要特定硬件或位置的企业客户添加私有服务器池**.

{% hint style="success" %}
请 **联系我们以规划发布**，或者如果你对位置可用性有任何要求。
{% endhint %}

#### 玩家问题处理

玩家问题可能源自服务器 bug 或提供商事故，但也可能来自第三方，例如本地 ISP、游戏服务、底层库中的 bug、基础设施提供商或其他来源。

在排查玩家反馈或事故时，请考虑以下因素：

* **匹配质量** ——玩家彼此应当距离较近（同一区域）以便 [#server-placement](#server-placement "mention") 获得最佳结果：
  * 请查看 [匹配](/zh/learn/pi-pei.md) 以及 [Ping 信标](/zh/learn/bian-pai/ping-beacons.md) 了解我们的建议，
  * 请查看 [深入了解](/zh/learn/pi-pei/matchmaker-in-depth.md#player-tracing) 学习如何查找与玩家反馈相关的服务器日志，
* **区域性问题：**
  * 本地互联网服务提供商（ISP）可能正在暂时处置事故，
  * 某些区域（例如中国、俄罗斯）可能由于本地制裁而受到限制，
* **缓存级别** ——Edgegap 将优先在已缓存的位置快速部署：
  * [启用缓存，以便在几秒内部署你的服务器](/zh/learn/bian-pai/application-and-versions.md#other-parameters-optional),
* **最长部署时间** ——部署可能因缓慢且繁重的初始化过程而失败：
  * 请查看 [应用和版本](/zh/learn/bian-pai/application-and-versions.md#safety-guardrails) 延长超时时间，
  * 将初始化步骤推迟到绝对必要时再执行，
* **服务器镜像或集成问题**.

{% hint style="success" %}
**在客户端对局历史 UI 中显示部署 ID** 以便在排查时追踪玩家反馈。
{% endhint %}

{% hint style="info" %}
通知用户有关大范围 bug、临时问题和故障，以减轻负面情绪。
{% endhint %}

## 🔄 部署生命周期

Edgegap 部署会经历若干生命周期阶段，由部署状态来表示。

#### 1. 启动部署

用于 **测试目的** 的部署可以通过以下方式启动：

* [Unreal Engine](/zh/unreal-engine.md) - Unreal Engine 项目的 Docker 扩展或插件，
* [Unity](/zh/unity.md) - Unity 项目的插件，
* [Dashboard Web UI](https://app.edgegap.com/deployment-management/deployments/list) - 用于测试服务器集成的易用网页界面。

用于 **生产环境** 应通过以下方式启动：

* [匹配](/zh/learn/pi-pei.md) - 寻找其他玩家并按需启动服务器（[#match-bound](#match-bound "mention")).
* [Server Browser](/zh/learn/server-browser.md) - 使用较长初始化进行预热服务器（[#regional-standby](#regional-standby "mention")).
* [部署 API](https://docs.edgegap.com/api/#tag/Deployments/operation/deploy) - 服务器到服务器的自定义集成（自定义扩缩容）。

{% hint style="success" %}
**保存** `request_id`  **（部署 ID）并为部署添加标签** 以便日后识别和排查问题。
{% endhint %}

{% hint style="info" %}
在使用 [部署 API](https://docs.edgegap.com/api/#tag/Deployments/operation/deploy)进行测试时，你可以覆盖默认的 Dockerfile `CMD` 为自定义命令。
{% endhint %}

#### 2. 正在部署

一旦部署启动，我们的系统将迅速连续执行多项步骤：

* 遥测——我们正在测量来自可用数据中心到每位玩家的网络响应能力，
* 部署——我们正在保留容量并准备启动你的服务器容器，
* 容器启动——我们正在启动容器、安装依赖并进行初始化，
* 后处理——我们正在添加日志存储、监控并完成部署。

{% hint style="success" %}
启用 [在您的应用版本中启用缓存](/zh/learn/bian-pai/application-and-versions.md#active-caching) 在几秒内部署服务器。
{% endhint %}

{% hint style="warning" %}
**请求过多 429** ——为确保稳定并防止意外账单，我们对你的组织实施速率限制， **40 req/s**. [联系我们](mailto:info@edgegap.com) 以规划发布、估算上线流量并为成功做好准备。
{% endhint %}

#### 3. 部署就绪

你的容器已完全初始化，服务器现在正在启动。在接下来的几秒到一分钟内，你的服务器可能仍在初始化，在游戏引擎（或自定义运行时）完全准备好接受玩家连接之前，可能不会响应玩家请求。

{% hint style="success" %}
一旦部署变为就绪， **重试玩家连接直到成功**，或者直到预定义的客户端超时。
{% endhint %}

{% hint style="danger" %}
**服务器崩溃处理取决于您的** [**进程重启策略**](/zh/learn/bian-pai/application-and-versions.md#safety-guardrails)**.** [服务器状态可能会丢失](/zh/learn/bian-pai/chi-jiu-hua.md#state-management).
{% endhint %}

根据版本的 [应用和版本](/zh/learn/bian-pai/application-and-versions.md#active-caching) 配置，你可能会收到：

🟢 **缓存命中**

已启用缓存。由于复用了此机器上预先加载的镜像，部署更快。

🟡 **热启动**

未启用缓存。由于复用了同一机器上之前部署下载的镜像，部署更快。启用缓存可在全球范围内持续获得快速部署。

🔴 **缓存未命中**

已启用缓存。由于在缓存传播完成前突发流量激增，部署变慢。若在部署请求中启用“要求已缓存位置”可避免这种情况，但在意外流量激增时可能导致更多不可处理的部署。

🔴 **冷启动**

未启用缓存。部署较慢，镜像是在部署时下载的。启用缓存可加快部署。

#### 4. 部署错误

由于意外原因，你的部署可能在任何时刻进入不可处理状态。这更可能发生在测试集成或测试新的服务器构建时。

**错误部署不收费，它们会在 24 小时后自动停止。**

故障排查步骤：

* 通过 [我们的运行时间监控页面](https://status.edgegap.com/).
* 验证 Edgegap 服务状态，

{% hint style="info" %}
如果你需要帮助， [请通过 Discord 联系我们](https://discord.gg/MmJf8fWjnt)。关于实时游戏支持，请查看我们的 [工单系统](https://edgegap.atlassian.net/servicedesk/customer/portal/3).
{% endhint %}

{% hint style="success" %}
**请求帮助时，** **请提供你的部署 ID 和任何有用的细节** 以便我们及时调查！
{% endhint %}

#### 5. 部署已停止

**云部署将在运行 24 小时后终止** ，这是为了遵循我们的服务器清理政策以维护基础设施，并防止在部署未被正确关闭时产生意外费用。

对于运行超过 24 小时的长期服务器，可考虑使用 [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md) 与 [持久化](/zh/learn/bian-pai/chi-jiu-hua.md).

使用以下方法优化成本并提前停止空闲部署：

* **应用版本** [**重启策略**](/zh/learn/bian-pai/application-and-versions.md#safety-guardrails) - 防止在关机或崩溃时自动重启。
* **游戏最大时长** - 在你的 [应用和版本](/zh/learn/bian-pai/application-and-versions.md#safety-guardrails) 中分配的时间已过期。
* **通过以下方式自停止** [**DELETE\_URL**](/zh/learn/bian-pai/deployments.md#injected-environment-variables) - 在玩家离开且比赛结束后，部署会自行停止。
  * 查看 [Unreal Engine](/zh/unreal-engine.md#stop-deployments) 以及 [Unity](/zh/unity.md#stop-deployments) SDK 实用工具指南和简单集成指南。
* **从自定义后端停止** - 你的自定义会话编排可能使用 [部署 API](https://docs.edgegap.com/api/#tag/Deployments/operation/deployment-delete).
* [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md) 运行你部署的主机已通过计划任务被删除。

{% hint style="info" %}
一旦部署停止， **我们会触发优雅终止** 通过发送 `SIGTERM` 信号到你的主进程，从而允许一个短暂的终止期。期满后， `SIGKILL` 信号将被发送以停止部署。
{% endhint %}

## 👀 可观测性

让游戏服务器与第三方互操作并获得运营洞察。

### 可发现性

一旦就绪，部署将被分配一个 URL（[fqdn](https://en.wikipedia.org/wiki/Fully_qualified_domain_name)）以及每个内部端口对应的外部端口。

{% hint style="success" %}
使用 **部署标签（最多 40 个字符）来轻松标记你的部署** 以及 [#filter-deployments](#filter-deployments "mention").
{% endhint %}

{% hint style="info" %}
**来自你的游戏服务器的出站流量（到客户端或后端）永远不会被阻止** 或过滤。
{% endhint %}

#### **Websocket（WS）和安全 Websocket（WSS）**

要在 Edgegap 上使用基于 websocket 的网络代码，你有两个选项：

* **托管证书**，1 分钟内即可设置，无需编写任何代码：
  * 配置你的 [应用和版本](/zh/learn/bian-pai/application-and-versions.md) 转向 **使用 Websocket（WS）并启用 TLS 升级，**
  * 使用 Edgegap URL 连接客户端（例如 `https://5fa53fa00a57.pr.edgegap.net/`)
* **自托管证书**，如果您想使用自己的自定义域名：
  * 配置你的 [应用和版本](/zh/learn/bian-pai/application-and-versions.md) 转向 **使用安全 WebSocket（WSS）**,
  * 使用自定义 DNS 记录配置您自己的 TLS 证书流程（例如在 [Cloudflare](https://www.cloudflare.com/application-services/products/ssl/)).

{% hint style="danger" %}
未捕获的服务器异常会导致部署的容器重启并使 TLS 安全失效。在这种情况下， [停止您的服务器](#id-5.-deployment-stopped) 以及 [将玩家重新匹配到新的部署](/zh/learn/pi-pei.md#custom-lobby). [服务器状态可能会丢失](/zh/learn/bian-pai/chi-jiu-hua.md#state-management).
{% endhint %}

### 注入变量 <a href="#injected-environment-variables" id="injected-environment-variables"></a>

游戏服务器通常需要额外信息，例如服务器 IP、内部端口值等。注入只读环境变量是一种可靠、与云无关的传递参数方式。

{% hint style="success" %}
使用以下方式获取变量值： [在 C# 中使用 GetEnvironmentVariable](https://learn.microsoft.com/en-us/dotnet/api/system.environment.getenvironmentvariable?view=net-8.0) 或 [在 C++ 中使用 GetEnvironmentVariable](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/GenericPlatform/FGenericPlatformMisc/GetEnvironmentVariable).
{% endhint %}

{% hint style="info" %}
查看 [应用版本变量](/zh/learn/bian-pai/application-and-versions.md#injected-variables) 以及 [匹配器变量](/zh/learn/pi-pei/matchmaker-in-depth.md#injected-variables) ，此外还有下面的部署变量。
{% endhint %}

#### **自定义变量**

为每个部署定义最多 20 个自定义变量，每个变量最多包含 4KB 的字符串数据。

{% hint style="warning" %}
**请避免使用下方保留名称，否则您的自定义变量将被覆盖！**
{% endhint %}

通过读取 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` .
  * 用户定义的部署标签，以逗号分隔， [便于搜索和筛选](#filter-deployments).
* **`ARBITRIUM_PRIVATE_FLEET_ID`** — 例如 `PUBLIC_CLOUD` ，或者如果托管在 [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md).

#### 资源规格

* **`ARBITRIUM_HOST_IN_PRIVATE_FLEET`** — 例如 `false` ，表示是否托管在 [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md).
* **`ARBITRIUM_HOST_BASE_CLOCK_FREQUENCY`**  — 例如 `2000` ，处理器频率，单位为 MHz。
* **`ARBITRIUM_DEPLOYMENT_VCPU_UNITS`**  — 例如 `256`，分配的 vCPU 单位（1024 = 1 vCPU）。
* **`ARBITRIUM_DEPLOYMENT_MEMORY_MB`**  — 例如 `512`，分配的 RAM，单位为 MB（1024 = 1 GB）。

#### **生命周期管理**

* **`ARBITRIUM_DELETE_URL`**  — 例如 `https://api.edgegap.com/v1/self/stop/9f511e17/660`.
  * 可从部署内部调用， [部署将被平滑停止](#id-5.-deployment-stopped).
  * 需要唯一的一次性 `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` ，您的网络代码传输所使用的协议。

{% hint style="success" %}
示例假设您已将端口命名为 `gameport` （默认）。 **每个端口都会额外添加一组已清理的** [应用和版本](/zh/learn/bian-pai/application-and-versions.md#port-mapping) **变量：** `@超级端口！` ⇒ `ARBITRIUM_PORT_SUPER_PORT_INTERNAL` .
{% endhint %}

* **`ARBITRIUM_BEACON_ENABLED`**  — 例如 `true`，如果部署在 [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md) 与 [Ping 信标](/zh/learn/bian-pai/ping-beacons.md).
* **`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 字符串）**

{% hint style="info" %}
环境变量是 **以字符串化 JSON 形式存储的**，请使用 SDK 或自定义方法解析它们。
{% endhint %}

<details>

<summary><strong>ARBITRIUM_DEPLOYMENT_LOCATION</strong>：<br>- 部署位置的详细信息。</summary>

```json
ARBITRIUM_DEPLOYMENT_LOCATION="{
  "city": "蒙特利尔",
  "country": "加拿大",
  "continent": "北美洲",
  "administrative_division": "魁北克",
  "timezone": "东部时间",
  "latitude": 45.513707,
  "longitude": -73.619073
}"
```

</details>

<details>

<summary><strong>ARBITRIUM_PORTS_MAPPING</strong>：<br>- 您的内部和外部端口的详细信息。</summary>

```json
ARBITRIUM_PORTS_MAPPING="{
  "ports": {
    "gameport": {
      "name": "游戏端口",
      "internal": 7777,
      "external": 31504,
      "protocol": "UDP"
    },
    "webport": {
      "name": "Web 端口",
      "internal": 8888,
      "external": 31553,
      "protocol": "TCP"
    }
  }
}"
```

</details>

### 仪表盘监控

我们的 [仪表盘](https://app.edgegap.com/) 提供用于监控服务器可扩展性并协助运维的工具。

#### 分析

{% hint style="success" %}
查找 [侧边栏菜单中的分析仪表盘](https://app.edgegap.com/analytics/dashboards/list) ，位于“服务器托管与编排”分类下。
{% endhint %}

:star2: [**升级到按量付费套餐**](https://app.edgegap.com/user-settings?tab=memberships) **以解锁详细的服务器性能指标和洞察：**

* **常规洞察：** 监控发布版本的实时服务器数量 + 资源使用概览，
* **CPU 洞察**：排查因高 CPU 运算导致的服务器卡顿，
* **内存洞察**：缓解因超出分配内存而导致的服务器重启，
* **网络洞察：** 检测低效的网络模式并优化网络代码。

<figure><img src="/files/1fe080df503d808db717217af72e8d06f2a68d76" alt=""><figcaption></figcaption></figure>

#### 部署地图

{% hint style="success" %}
在以下位置查找部署地图： [仪表盘上的部署详情页面](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

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

<figure><img src="/files/bea6652c29878a253706070954af3021e223b0f7" alt=""><figcaption></figcaption></figure>

#### 部署平衡点

{% hint style="success" %}
在以下位置查找部署平衡点热力图： [仪表盘上的应用详情页面](https://app.edgegap.com/application-management/applications/list).
{% endhint %}

预览部署平衡点热力图，并按以下条件筛选 [应用和版本](/zh/learn/bian-pai/application-and-versions.md)。平衡点是与给定部署中的每位玩家具有相近网络距离的近似位置：

<figure><img src="/files/cc02eb59be705e677321271edac218365bb4a44c" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
出现在奇怪位置的平衡点热点（例如格陵兰）表明玩家彼此相距很远。了解 [#connection-quality](#connection-quality "mention") 以及 [Ping 信标](/zh/learn/bian-pai/ping-beacons.md) 以优化您的匹配。
{% endhint %}

#### 部署日志

{% hint style="success" %}
在以下位置查找部署日志： [仪表盘上的部署详情页面](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

部署日志显示以下信息： [#deployment-lifecycle](#deployment-lifecycle "mention"):

<figure><img src="/files/ab66fcf5c1f0f83117417347efb7d6a921c930b8" alt=""><figcaption></figcaption></figure>

#### 容器日志

{% hint style="success" %}
在以下位置查找容器日志： [仪表盘上的部署详情页面](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

在出现问题或调试时检查您的游戏服务器日志：

<figure><img src="/files/b20b6aa31815b0c56cb645ded63c79d8ccded124" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**部署停止后，容器日志将被删除。** 设置 [第三方 S3 日志存储](/zh/docs/endpoint-storage.md) 以保存日志。
{% endhint %}

#### 容器指标

{% hint style="success" %}
在以下位置查找容器指标： [仪表盘上的部署详情页面](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

查看容器指标（处理器、内存、网络）以：

* 识别常见连接问题，当 [#troubleshooting](#troubleshooting "mention"),
* 检测导致资源使用激增的低效实现模式，
* 在特定场景下精准定位低效的资源使用，
* 在优化过程中验证服务器资源使用的变化，
* 对服务器初始化的资源消耗和耗时进行基准测试。

历史指标以 1 分钟时间间隔显示平均值，可在免费套餐中使用。

:star2: [**升级到按量付费套餐**](https://app.edgegap.com/user-settings?tab=memberships) **以解锁 1 秒时间间隔的精确指标。**

<figure><img src="/files/638b41286595e41c20f86c46d74eaa2fc6f6caca" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
[联系我们](mailto:info@edgegap.com) 在您发布之前，请申请大规模发布的实时托管支持。
{% endhint %}

### 上下文与状态

可通过 JSON 格式检索额外的部署信息：

* 从部署内部（游戏服务器）使用 [部署上下文 API](https://docs.edgegap.com/api/#tag/Context/operation/context-get),
* 从部署外部（后端 / 第三方）使用 [部署状态 API](https://docs.edgegap.com/api/#tag/Deployments/operation/deployment-status-get).

{% hint style="info" %}
上下文 API（来自部署内部）需要 Context API 令牌，而状态 API 使用您的 Edgegap 令牌。
{% endhint %}

{% hint style="danger" %}
**请求过多 429 - 上下文和状态 API 的速率限制为每个组织 20 req/s。**
{% endhint %}

{% hint style="success" %}
**使用** [#webhooks](#webhooks "mention") **用于自动化（自定义匹配）以避免速率限制并确保可扩展性。** 上下文和状态 API 仅用于开发、QA 和故障排查。
{% endhint %}

### 筛选部署

要在所有部署中快速搜索，您可以 [使用我们的仪表盘](https://app.edgegap.com/deployment-management/deployments/list):

<figure><img src="/files/2350252eb260d5f30aa5783c31b4900768778737" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
或者，让玩家 **从列表中选择一个持久的（始终在线）服务器** 带有 [Server Browser](/zh/learn/server-browser.md).
{% endhint %}

[使用 API 列出部署](https://docs.edgegap.com/api/#tag/Deployments/operation/deployments-get) 并通过后端集成应用筛选条件：

<table><thead><tr><th width="237">部署属性</th><th width="193">运算符</th><th>示例值</th></tr></thead><tbody><tr><td><a href="/pages/5e7e2169ca3822647d4607dfc1d3487ebcc0836c#deployment-lifecycle"><code>status</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"ready"</code> 或 <code>"error"</code></td></tr><tr><td><a href="#observability"><code>request_id</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a> </td><td><a data-footnote-ref href="#user-content-fn-4"><code>"7e709a0d8efd"</code></a></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>位于</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><a data-footnote-ref href="#user-content-fn-4"><code>[ "7e709a0d8efd", "4ba353100b4b" ]</code></a></td></tr><tr><td><a href="#discoverability"><code>tags</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"tagA"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>位于</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "tagA", "tagB" ]</code></td></tr><tr><td><a href="#id-1.-start-a-deployment"><code>created_at</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-7"><code>lte</code></a>  或 <a data-footnote-ref href="#user-content-fn-8"><code>gte</code></a></td><td><a href="https://en.wikipedia.org/wiki/ISO_8601"><code>2025-05-12T20:03:20Z</code></a></td></tr><tr><td><a href="/pages/26d6dbbfe78b518cb1a2c18e767a1a5de69c506c"><code>application</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"my-app"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>位于</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "my-app", "my-other-app" ]</code></td></tr><tr><td><a href="/pages/26d6dbbfe78b518cb1a2c18e767a1a5de69c506c"><code>version</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"1.0.0"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-9"><code>位于</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "1.0.0", "prod" ]</code></td></tr><tr><td><a href="/pages/3c7cd8f1b8dc649268f6411b6023acc174fe28ee"><code>fleet_name</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"my-app-fleet-europe"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>位于</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "fleet-eu", "fleet-us" ]</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-10"><code>ilike</code></a></td><td><code>"%-eu%"</code></td></tr><tr><td><a href="/pages/3c7cd8f1b8dc649268f6411b6023acc174fe28ee"><code>host_name</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"alpha-north-america-95fab093"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>位于</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "alpha-north-america-95fab093" ]</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-10"><code>ilike</code></a></td><td><code>"%north-america%"</code></td></tr></tbody></table>

{% hint style="info" %}
每个属性在单个请求中最多只能有 1 个筛选运算符。请参阅 [API 参考](/zh/docs/api.md) 了解更多。
{% endhint %}

按请求中字段出现的顺序对结果按多个字段排序：

| 部署属性                                                                                   | 顺序                                                                     |
| -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| [`created_at`](#id-1.-start-a-deployment)                                              | [`asc`](#user-content-fn-11)[^11] 或 [`desc`](#user-content-fn-12)[^12] |
| [`available_session_sockets`](broken://pages/11ccd578e752c64b01112507ccb14f0f02f0bedf) | [`asc`](#user-content-fn-13)[^13] 或 [`desc`](#user-content-fn-14)[^14] |

示例筛选查询：

<details>

<summary>列出 <a href="#id-4.-deployment-error">错误状态的部署</a> 以便排查并移除。</summary>

编码后的 URL：

```
https://api.edgegap.com/v1/deployments?query={"filters":[{"field":"status","operator":"eq","value":"error"},{"field":"application","operator":"eq","value":"my-app"},{"field":"version","operator":"eq","value":"green"}],"order_by":[{"field":"created_at","order":"desc"}]}
```

格式化后的 JSON 查询：

```json
{
  "filters": [
    {
      "field": "status",
      "operator": "eq",
      "value": "error"
    },
    {
      "field": "application",
      "operator": "eq",
      "value": "my-app"
    },
    {
      "field": "version",
      "operator": "eq",
      "value": "green"
    }
  ],
  "order_by": [
    {
      "field": "created_at",
      "order": "desc"
    }
  ]
}
```

</details>

<details>

<summary>列出 <a href="/pages/6f9da0e6c31c7a483b63af1c186100316ca2f793#rolling-updates-and-ab-tests">应用版本过旧的部署</a> 以确认发布已完成。</summary>

编码后的 URL：

```
https://api.edgegap.com/v1/deployments?query={"filters":[{"field":"status","operator":"eq","value":"ready"},{"field":"application","operator":"eq","value":"my-app"},{"field":"version","operator":"eq","value":"blue"}],"order_by":[{"field":"created_at","order":"desc"}]}
```

格式化后的 JSON 查询：

```json
{
  "filters": [
    {
      "field": "status",
      "operator": "eq",
      "value": "ready"
    },
    {
      "field": "application",
      "operator": "eq",
      "value": "my-app"
    },
    {
      "field": "version",
      "operator": "eq",
      "value": "blue"
    }
  ],
  "order_by": [
    {
      "field": "created_at",
      "order": "desc"
    }
  ]
}
```

</details>

{% hint style="success" %}
别忘了添加 `Authorization` 请求中的带有您的 Edgegap API 令牌的请求头。
{% endhint %}

### Webhook

在您的游戏后端接收关于以下内容变化的简单 HTTP 通知： [#deployment-lifecycle](#deployment-lifecycle "mention") ，只需在您的 [部署 API 请求中指定一个 webhook URL](/zh/docs/api/zhuan-yong-fu-wu-qi.md#post-deployments)。适用于：

* 就绪时：部署容器 [已成功启动](#id-1.-start-a-deployment) （服务器随后开始初始化），
* 出错时：部署无法启动，并且 [#id-4.-deployment-error](#id-4.-deployment-error "mention") 发生了错误，
* 终止时： [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") 且游戏服务器不再可达。

同一部署的 Ready 和 Error webhook 绝不会同时触发。

<details>

<summary>Webhook 示例负载</summary>

```json
{
  "request_id": "f68e011bfb01",
  "application": "my-game-server",
  "version": "2024.01.30-16.23.00-UTC",
  "fqdn": "f68e011bfb01.pr.edgegap.net",
  "public_ip": "162.254.141.66",
  "deployed_at": "2026-02-10T20:35:48Z",
  "termination_scheduled_at": "2026-02-10T21:35:48Z",
  "ports": {
    "gameport": {
      "external": 31504,
      "internal": 7777,
      "protocol": "UDP",
      "name": "gameport",
      "tls_upgrade": false,
      "link": "f68e011bfb01.pr.edgegap.net:31504",
      "proxy": null
    }
  },
  "location": {
    "city": "蒙特利尔",
    "country": "加拿大",
    "continent": "北美洲",
    "administrative_division": "魁北克",
    "timezone": "东部时间",
    "latitude": 45.513707,
    "longitude": -73.619073
  },
  "tags": [
    "tag1",
    "tag2"
  ],
  "host_id": "alpha-north-america-70364ef8",
  "host_in_private_fleet": false,
  "private_fleet_id": "PUBLIC_CLOUD",
  "vcpu_units": 256,
  "memory_mib": 512
}
```

</details>

{% hint style="success" %}
**Webhook 是自定义后端部署集成的首选推荐方式。**
{% endhint %}

{% hint style="warning" %}
**Webhook 不会重试**，如果由于速率限制或错误导致你的后端未处理该请求，这些信息可能会丢失。如果在预期时间内未收到 webhook，请回退到 Status API。
{% endhint %}

{% hint style="info" %}
Webhook 会监控部署生命周期，但不了解你的场景/关卡初始化状态。要观察场景/关卡的加载进度，请在你的游戏服务器中实现自定义 webhook。
{% endhint %}

## 🚨 故障排除

排查部署问题时：

1. 请确认你的 [#deployment-logs](#deployment-logs "mention") 以及 [#container-logs](#container-logs "mention"),
2. 在本地运行你的服务器，以排除集成错误，
3. 查看本页上的故障排除步骤，
4. 通过以下渠道联系我们： [社区 Discord](https://discord.gg/MmJf8fWjnt) 并附上你的部署 ID。

{% hint style="info" %}
查看 [#player-issue-resolution](#player-issue-resolution "mention") 以获取我们关于如何处理玩家社区反馈的建议。
{% endhint %}

<details>

<summary>无法将客户端连接到服务器 - <code>请求超时。</code>, <code>请求超时</code> , <code>ConnectionFailed</code> ，或 <code>端口验证失败</code>.</summary>

* 首先，确保部署处于 Ready 状态，并且你的部署日志中没有运行时异常或错误。如果你的部署已停止，请查看我们的 [仪表盘](https://app.edgegap.com/deployment-management/deployments/list).
* 如果你使用的是 Mirror netcode，你需要启用 [“Auto Start Server”](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) 在你的 `NetworkManager` ，重新构建、推送并重新部署你的服务器。
* 如果你使用的是 FishNet netcode，你需要启用 [“Start on Headless”](https://fish-networking.gitbook.io/docs/manual/components/managers/server-manager#settings-are-general-settings-related-to-the-servermanager) 在你的 `ServerManager`，重新构建、推送并重新部署你的服务器。
* 如果你使用的是 Photon Fusion 2 netcode，请确保你的服务器传递了部署的公网 IP、外部端口以及 `roomCode` 在服务器端，以及客户端中的相同房间代码，位于 [“NeworkRunner.StartGame”](https://doc.photonengine.com/fusion/current/manual/network-runner#creating-or-joining-a-room) 参数 `StartGameArgs`。部署 ID（例如 `b63e6003b19f`）是一个很好的选择，因为它在全局范围内唯一，并且客户端可通过 [匹配器](/zh/learn/pi-pei/matchmaker-in-depth.md) 分配和 [深入了解](/zh/learn/pi-pei/matchmaker-in-depth.md#injected-environment-variables).
* 接下来，请确认你服务器构建中的 netcode 设置里的端口配置与你的内部端口一致，位于你的 [App 版本](https://app.edgegap.com/application-management/applications/list)。你可以通过编辑 [App 版本](https://app.edgegap.com/application-management/applications/list) 而无需重新构建来更改端口映射。在你的 netcode 集成中找到你的协议。
* 请确保你的游戏客户端连接到 **外部端口** 在你的部署详情页面上显示的端口；出于安全原因，该值将始终随机化。
* 如果你在 netcode 集成中使用 Secure WebSocket（WSS）协议，请确保你的 [App 版本](https://app.edgegap.com/application-management/applications/list) WSS 端口的端口配置已启用 TLS 升级。
* 你是否位于中国并且正在使用 [Smart Fleets](https://docs.edgegap.com/docs/deployment/session/fleet-manager/fleet)？你的连接可能被防火长城阻止。考虑在你的舰队中添加一台位于中国的服务器，或使用 VPN 连接。

</details>

<details>

<summary>我的部署已停止/重启，我再也无法访问它的日志了。</summary>

* 如果服务器进程因异常崩溃，我们的系统会尝试自动重启服务器。建议在本地测试你的服务器，以找出根本原因。
* 我们只会在部署期间保留日志；如果你希望在部署停止后查看日志，请 [集成第三方日志存储](https://docs.edgegap.com/docs/deployment/endpoint-storage).
* 查看 [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") 以找出导致你的部署停止的所有原因。

</details>

<details>

<summary>我的部署在 X 分钟后自动停止。</summary>

* 免费套餐部署有 60 分钟的时间限制，请考虑升级你的账户。
* 根据我们的服务器清理策略，云部署在运行 24 小时后将被终止，以便进行基础设施维护，并防止在部署未正确关闭时产生意外费用。对于运行超过 24 小时的长时间服务器，请考虑使用 [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md) 与 [持久化](/zh/learn/bian-pai/chi-jiu-hua.md).
* 查看 [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") 以找出导致你的部署停止的所有原因。

</details>

<details>

<summary>我的部署已就绪，但之后几分钟内我仍无法连接。</summary>

* 一旦部署处于 Ready 状态，你的游戏引擎初始化就会开始。这个过程可能需要几秒到几分钟不等，在此期间服务器不接受玩家连接。
* 考虑优化你的服务器初始化以缩短这段时间。
* 游戏客户端应以 1 秒间隔重试连接一段有限时间（取决于你的初始化时长），之后再返回匹配。
* 考虑添加一个加载场景，以便服务器可以与客户端同时进行初始化（在 Unreal Engine 中还包括传送），同时同步双方的状态。

</details>

<details>

<summary>我的 Meta Quest 设备报出 <code>HTTP 0：无法解析目标主机</code> .</summary>

* 当为 Android 目标构建 Unity 应用时，你的 Internet Access 权限可能会从输出的 APK 客户端构建产物中被自动移除。
* 在以下位置重新添加权限（之后需要重新构建客户端）：
  * 项目设置 / OpenXR / :gear: Meta Quest Support / Force Remove Internet Permissions（取消勾选）。
  * 玩家设置 / Internet Access（设为需要）。

</details>

<details>

<summary>如果玩家离开我的部署，会发生什么？</summary>

* 默认情况下，服务器不会拒绝玩家连接。玩家身份验证由你的开发者决定，因为可以使用许多不同的方法和玩家身份验证提供商。
* 游戏客户端可能会在本地存储连接信息，以便在客户端意外崩溃时尝试重新连接。
* 若要允许玩家加入进行中的游戏，请考虑使用 [深入了解](/zh/learn/pi-pei/matchmaker-in-depth.md#backfill) 或 [Sessions](https://docs.edgegap.com/docs/deployment/session).

</details>

<details>

<summary>我的服务器在变为就绪后显示 100% 的 CPU 使用率。</summary>

* 这可能不是问题，因为游戏引擎在服务器初始化期间往往会执行 CPU 密集型操作。如果在部署开始后 2-3 分钟 CPU 使用率仍未下降，你可能需要优化服务器或增加 App 版本资源。
* 降低 tick rate 会影响 CPU 使用率，因为服务器执行的消息操作会更少。
* 如果你使用的是 Mirror netcode，你需要启用 [“Auto Start Server”](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) 在你的 `NetworkManager` ，重新构建、推送并重新部署你的服务器。
* 如果你使用的是 FishNet netcode，你需要启用 [“Start on Headless”](https://fish-networking.gitbook.io/docs/manual/components/managers/server-manager#settings-are-general-settings-related-to-the-servermanager) 在你的 `ServerManager`，重新构建、推送并重新部署你的服务器。
* 在免费套餐中，你仅限使用 1.5 vCPU 和 3GB 内存（RAM）。
* 在创建新的 App 版本时，你可以增加分配的资源。你可以在我们的 Dashboard 中复制你的 App 版本，并根据需要调整这些值，而无需重新构建服务器或镜像。

</details>

<details>

<summary>我的部署正在反复重启并显示错误 `OOM kill`。</summary>

* 这种行为是由于超过了分配的内存量。考虑通过对象池、压缩或移除场景中不需要的对象来优化内存使用。
* 请确保你的项目正在加载包含你的 `NetworkManager` 并且该场景已包含在 Unity 的 Build Settings 中。
* 在免费套餐中，你仅限使用 1.5 vCPU 和 3GB 内存（RAM）。
* 在创建新的 App 版本时，你可以增加分配的资源。你可以在我们的 Dashboard 中复制你的 App 版本，并根据需要调整这些值，而无需重新构建服务器或镜像。

</details>

<details>

<summary>有时，我的服务器内存（RAM）使用率会飙升到很高，这是问题吗？</summary>

* 只要你保持在分配的 App 版本内存量内，这就不是问题。&#x20;
* 超过分配的 App 版本内存量将导致 \`OOM kill\`（见上文）。

</details>

<details>

<summary>在同一台机器上运行的其他服务器会影响我的服务器性能吗？</summary>

* 不会，我们的平台确保分配的资源不会被其他工作室或共享基础设施上的其他服务器使用。使用 Edgegap，没有“吵闹邻居”。

</details>

[^1]: 会话可能持续长达 24 小时

[^2]: 等于

[^3]: 不等于

[^4]: request\_id（部署 ID）

[^5]: 在数组中

[^6]: 不在数组中

[^7]: 小于或等于

[^8]: 大于或等于

[^9]: &#x20;在数组中

[^10]: 不区分大小写的模式匹配：

    * 使用 `%`  表示任意字符序列
    * 使用 `_`  表示任意单个字符

[^11]: 升序，最早的在前

[^12]: 降序，最新的在前

[^13]: 升序，已满的在前

[^14]: 降序，空的在前
