> 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 小时的服务器将自动终止。

🧩 **最适合**

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

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

### 区域待机

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

会话通常通过一个 [服务器浏览器](/zh/learn/fu-wu-qi-liu-lan-qi.md) 基于玩家偏好（按区域自动分配或自定义搜索），并根据区域容量进行横向部署预扩容。

👍 **优势**

* 对于饱经战火的老兵来说，这是熟悉且易于理解的老派方式。
* 最高标准的安全性和玩家作弊防护（服务器权威）。
* 基于每月承诺，成本易于预测。

👎 **缺点**

* 托管成本更高——每个区域都需要一个或多个空闲待机服务器（突发容量）。
* DevOps 成本更高——每个区域都要重复扩缩容、运维和维护。
* 玩家基数较小的区域因加入远处服务器而延迟较高。

🧩 **最适合**

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

### 点对点

将开发精力从 ~~专用服务器~~ 转移到 **面向非竞技游戏的中继网络代码**.

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

👍 **优势**

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

👎 **缺点**

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

🧩 **最适合**

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

{% hint style="success" %}
查看我们的 [分布式中继](https://docs.edgegap.com/docs/distributed-relay-manager) 该服务可使点对点连接具备同类最佳的延迟和安全性。
{% endhint %}

## 📍 服务器部署位置

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

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

{% hint style="success" %}
**Edgegap 部署在** [**最佳可能的位置**](#server-score) **，并具备可用容量**，以实现快速且低延迟的比赛。
{% endhint %}

<figure><img src="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FjiPRa6gGEku2oGm3qW5s%2Fimage.png?alt=media&amp;token=306897d4-8ab1-4766-bc90-5d02882b573c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
查看 [#deployment-balance-points](#deployment-balance-points "mention") 转移到 **实时分析服务器部署位置**，并且在大规模场景下。
{% endhint %}

### 服务器评分

服务器评分策略使用 Edgegap 的专利方法，该方法 **会为每场比赛单独优化服务器的部署位置**。通过非侵入式遥测来近似评估每位玩家与我们服务器位置的网络接近度，并选择能提供最佳以下方面的服务器：

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

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

**无响应的部署位置** ——服务器距离很远，所有玩家延迟都很高：

<figure><img src="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FNszxk3uRY78L7V6nLPlp%2Fimage.png?alt=media&amp;token=904b9b3d-7499-45d3-81c6-cc2b5cb6dd32" alt=""><figcaption></figcaption></figure>

**不公平的部署位置** ——延迟不均衡，一名玩家因更高延迟而处于劣势：

<figure><img src="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FxjsD6ijYWHljBAVuV57w%2Fimage.png?alt=media&amp;token=ab477e89-4afe-4203-9b7f-b85b035dc9eb" alt=""><figcaption></figcaption></figure>

**良好部署位置示例** ——所有玩家都具有响应快且公平的延迟：

<figure><img src="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FQfSd4uo9twyxEWCkPLqu%2Fimage.png?alt=media&amp;token=8d3cd64b-9527-48fe-886b-96393c15449d" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
此策略 **尤其适合为彼此相距较远的一组玩家托管** （北美 vs 南美，或西海岸 vs 东海岸），这在玩家基数较小时很常见。
{% endhint %}

### 地理位置

或者， **提供所需服务器位置的纬度和经度坐标：**

⭐ **推荐：** 找到最快的 ping 信标，并在用户字段中发送其坐标或 IP。

⚙️ **自定义**：在你的游戏后端中定义区域（含坐标），通过自定义 API 获取。

👉 **最适合测试：** 在游戏客户端开发版本中硬编码定义区域（含坐标）。

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

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

### 区域锁定

一些工作室更喜欢锁定稳定且可预测的位置（例如 MMO，具有 [持久化](/zh/learn/bian-pai/chi-jiu-hua.md)）。考虑 [服务器浏览器](/zh/learn/fu-wu-qi-liu-lan-qi.md) 与 [区域扩缩容策略](/zh/learn/fu-wu-qi-liu-lan-qi.md#automated-scaling) 以及 [自动分配预留](/zh/learn/fu-wu-qi-liu-lan-qi.md#auto-assigned-reservation).

{% 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 家云和裸金属提供商的地点，你将获得 **全球任何地方玩家的同类最佳延迟**.

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

* **基础设施可用性** ——某一地区的互联网连接质量可能不足。
* **自然因素** ——服务器包含敏感组件，需要稳定环境（没有地震）。

#### 高可用性

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

* **突发流量** ——在 15 分钟内完成的部署会影响扩缩容趋势。
* **资源需求** ——每个位置的总 vCPU 需求决定扩缩容速度。
* **提供商替代方案** ——某些偏远位置可用的提供商选项更少。
* **提供商容量** ——某些位置可能只提供 4 vCPU 或 8 vCPU 机器。
* **服务质量** ——某些提供商在同一区域内跨 ISP 提供更好的网络质量。
* **工作室时间安排** ——测试和 QA、封闭测试或锦标赛的特殊请求。

所有应用的部署请求都会合并，以评估各个位置的需求。默认情况下，所有组织具有相同的分配优先级。 **工作室可以选择添加自定义** [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md).

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

#### 玩家问题解决

玩家问题有时可能由服务器或托管 bug 引起，但往往无关——也要考虑网线/Wi‑Fi 连接、互联网服务提供商、后端服务，或客户端/服务器底层库中的 bug。

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

* **匹配质量** ——尽可能优化为同区域匹配：
  * [匹配](/zh/learn/pi-pei.md) 以及 [Ping 信标](/zh/learn/bian-pai/ping-beacons.md) 对于我们的建议，
  * [深入了解](/zh/learn/pi-pei/matchmaker-in-depth.md#player-tracing) 以查找与玩家报告相关的服务器日志。
* **区域网络和 ISP 问题：**
  * 本地互联网服务提供商（ISP）可能暂时正在处理一起事故，
  * 某些地区（例如中国、俄罗斯）可能因当地制裁而受到限制。
* **缓存级别** ——没有缓存时，你的会话可能会因部署较慢而超时：
  * [启用缓存，以在几秒内部署你的服务器](/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 扩展或 EGIK 插件。
* [Unity](/zh/unity.md) ——用于 Unity 项目的托管快速入门插件。
* [Godot](/zh/godot.md) ——用于 Godot 项目的托管快速入门插件。
* [Dashboard Web UI](https://app.edgegap.com/deployment-management/deployments/list) ——用于快速服务器测试和迭代的简易网页界面。

{% hint style="warning" %}
**手动启动你的部署，复制 URL 和端口在实时游戏中行不通。**
{% endhint %}

使用以下任一方式，自动化热门游戏流程，以管理会话并按需扩展：

{% columns %}
{% column width="33.33333333333333%" %}
[匹配](/zh/learn/pi-pei.md):

* 更短的回合
* 按需对局
* 技能评级和/或\
  自定义规则
  {% endcolumn %}

{% column width="33.33333333333333%" %}
[服务器浏览器](/zh/learn/fu-wu-qi-liu-lan-qi.md):

* 持久模式或回合制
* 社交区域枢纽
* 自动分配和/或\
  自定义搜索
  {% endcolumn %}

{% column width="33.33333333333333%" %}
自定义后端：

* 迁移实时游戏
* [使用 v2 API 部署](/zh/docs/api/zhuan-yong-fu-wu-qi.md)
* [监控 Webhooks](/zh/learn/bian-pai/deployments.md#webhooks)
  {% endcolumn %}
  {% endcolumns %}

{% hint style="success" %}
**保存** `request_id`  **（部署 ID）并为部署添加标签** 以便日后识别和排查问题。
{% 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. 部署就绪

一旦部署就绪，你的引擎仍有工作要做。引擎会引导子系统和框架，然后将包括地图在内的资源加载到内存中。这发生在部署变为就绪之后，通常最多需要 1 分钟，具体取决于你的优化程度。

{% 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/).
* 尝试使用 Docker Desktop 在本地测试你的服务器容器，以排除 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 小时后终止** ，这符合我们的服务器清理政策，用于基础设施维护，并防止当部署因意外 bug 未正确关闭时累积意外成本。

对于运行超过 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。
* **从自定义后端停止** ——你的自定义会话编排可能会使用 [部署 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 %}

## 👀 可观测性

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

{% hint style="info" %}
**担心意外的云成本？** [配置云告警](https://app.edgegap.com/notifications?notification-table-limit=10\&notification-table-page=1#alarms) 在达到自定义计费阈值时接收通知，或者 [联系我们](https://discord.com/invite/NgCnkHbsGp) 了解自动化安全措施。
{% endhint %}

### 可发现性

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

{% hint style="success" %}
使用 **部署标签（最多 40 个字符）来轻松标记你的部署** 以便日后查找。
{% 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" %}
使用以下方式获取变量值： [Unity SDK](/zh/unity/developer-tools.md#software-development-kit), [Unreal EGIK](/zh/unreal-engine/developer-tools.md#integration-kit)，或者使用你运行时的环境变量方法。
{% 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，也称为 request 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` ，如果托管在其上则为舰队 ID [私有舰队](/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`**  - 例如： `2300` ，处理器频率，单位 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) **变量：** `@Super Port!` ⇒ `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 测量延迟。
* **`ARBITRIUM_HOST_BEACON_PORT_TCP_EXTERNAL`**  - 例如： `30456`，用于通过 TCP 测量延迟。

#### **结构化信息（以字符串形式的 JSON）**

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

<details>

<summary><strong><code>ARBITRIUM_DEPLOYMENT_LOCATION</code></strong></summary>

```json
ARBITRIUM_DEPLOYMENT_LOCATION="{
  "city": "Montreal",
  "country": "Canada",
  "continent": "North America",
  "administrative_division": "Quebec",
  "timezone": "Eastern Time",
  "latitude": 45.513707,
  "longitude": -73.619073
}"
```

</details>

<details>

<summary><strong><code>ARBITRIUM_PORTS_MAPPING</code></strong></summary>

```json
ARBITRIUM_PORTS_MAPPING="{
  "ports": {
    "gameport": {
      "name": "Game Port",
      "internal": 7777,
      "external": 31504,
      "protocol": "UDP"
    },
    "webport": {
      "name": "Web Port",
      "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 洞察**：排查因处理器密集型操作导致的服务器卡顿，
* **内存洞察**：缓解因超出分配内存而导致的服务器重启，
* **网络洞察：** 检测低效的网络模式并优化网络代码。

<figure><img src="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FLxDp1yFvkj5kB6AC4xVb%2Fimage.png?alt=media&amp;token=c0eff5f1-a374-41e0-a49a-9b3ecf0bfd1b" alt=""><figcaption></figcaption></figure>

#### 部署地图

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

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

<figure><img src="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FM4h0itPU5ntPaV5N5ZlW%2Fimage.png?alt=media&amp;token=98028901-9a40-4a2d-969e-db5f990e334f" 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="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FfDpIQxoFUJZNE77LJIwZ%2Fimage.png?alt=media&amp;token=94e730ad-3907-486b-8a06-0f469acd19ea" 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="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FfkyAYtylnOFmSp3yyiId%2Fimage.png?alt=media&amp;token=6a4f6ac4-5780-46a7-bcdd-1d8829c4abd7" alt=""><figcaption></figcaption></figure>

#### 容器日志

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

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

<figure><img src="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FTiaARmb6aAZfm0rjQmiT%2Fimage.png?alt=media&amp;token=7eb49138-954d-44a1-a025-1f88ed855366" 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="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FoIpCR3x9ibiXMEIWFgKG%2Fimage.png?alt=media&amp;token=86dcd914-db9f-4e81-8444-6c83805be9b6" 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" %}
Context API（来自部署）需要 Context API 令牌，而 Status API 使用你的 Edgegap 令牌。
{% endhint %}

{% hint style="danger" %}
**请求过多 429 - Context 和 Status API 的速率限制为每个组织 20 req/s。** 这些 API 旨在用于特殊操作，而非自动化会话编排。
{% endhint %}

{% hint style="success" %}
**使用** [#webhooks](#webhooks "mention") **用于自定义会话编排，以避免速率限制并确保可扩展性。**
{% endhint %}

### 筛选部署

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

<figure><img src="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2F42IaKG0pFQXSkvPCRH1T%2Fimage.png?alt=media&amp;token=6aba8781-13c9-4c0f-87e9-2d9612a57342" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
或者，让玩家 **从列表中选择一个持久的（始终在线）服务器** 带有 [服务器浏览器](/zh/learn/fu-wu-qi-liu-lan-qi.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="/zh/learn/bian-pai/deployments.md#deployment-lifecycle"><code>状态</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>等于</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>不等于</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>等于</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>不在数组中</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>标签</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>等于</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>不等于</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>不在数组中</code></a></td><td><code>[ "tagA", "tagB" ]</code></td></tr><tr><td><a href="#id-1.-start-a-deployment"><code>创建时间</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>等于</code></a>  或 <a data-footnote-ref href="#user-content-fn-7"><code>小于等于</code></a>  或 <a data-footnote-ref href="#user-content-fn-8"><code>大于等于</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="/zh/learn/bian-pai/application-and-versions.md"><code>应用</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>等于</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>不等于</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>不在数组中</code></a></td><td><code>[ "my-app", "my-other-app" ]</code></td></tr><tr><td><a href="/zh/learn/bian-pai/application-and-versions.md"><code>版本</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>等于</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>不等于</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>不在数组中</code></a></td><td><code>[ "1.0.0", "prod" ]</code></td></tr><tr><td><a href="/zh/learn/bian-pai/si-you-jian-dui.md"><code>舰队名称</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>等于</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>不等于</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>不在数组中</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="/zh/learn/bian-pai/si-you-jian-dui.md"><code>主机名称</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>等于</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>不等于</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>不在数组中</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 %}

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

| 部署属性                                                                                   | 顺序                                                                  |
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| [`创建时间`](#id-1.-start-a-deployment)                                                    | [`升序`](#user-content-fn-11)[^11] 或 [`降序`](#user-content-fn-12)[^12] |
| [`available_session_sockets`](broken://pages/11ccd578e752c64b01112507ccb14f0f02f0bedf) | [`升序`](#user-content-fn-13)[^13] 或 [`降序`](#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="/zh/learn/pi-pei/matchmaker-in-depth.md#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 %}

### Webhooks

在你的游戏后端接收关于以下内容变更的简单 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": "Montreal",
    "country": "Canada",
    "continent": "North America",
    "administrative_division": "Quebec",
    "timezone": "Eastern Time",
    "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>连接失败</code> ，或 <code>端口验证失败</code>.</summary>

* 首先，确保部署已就绪，并且你的部署日志中没有运行时异常或错误。如果你的部署已停止，请查看我们在 [仪表板](https://app.edgegap.com/deployment-management/deployments/list).
* 如果你使用的是 Mirror netcode，你需要启用 [“自动启动服务器”](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) 在你的 `NetworkManager` ，重新构建、推送并重新部署你的服务器。
* 如果你使用的是 FishNet netcode，你需要启用 [“在无头模式下启动”](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` 服务器端的 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 Upgrade。
* 你是否位于中国并正在使用 [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>

* 一旦部署就绪，你的游戏引擎初始化就会开始。此过程可能从几秒到几分钟不等，且服务器在此期间不会接受玩家连接。
* 请考虑优化服务器初始化，以缩短这段时间。
* 游戏客户端应在有限时间内以 1 秒间隔重试连接（具体取决于你的初始化时长），之后它们会返回匹配。
* 请考虑添加一个加载场景，以便服务器可以在与客户端同步状态的同时进行初始化（在 Unreal Engine 中还可执行关卡切换）。

</details>

<details>

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

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

</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 速率会影响 CPU 使用率，因为服务器执行的消息操作会减少。
* 如果你使用的是 Mirror netcode，你需要启用 [“自动启动服务器”](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) 在你的 `NetworkManager` ，重新构建、推送并重新部署你的服务器。
* 如果你使用的是 FishNet netcode，你需要启用 [“在无头模式下启动”](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]: 降序，空闲优先
