# 中继（P2P）

{% hint style="warning" %}
本节文档仍在编写中，可能会发生变更。

如有疑问或请求，请随时通过我们的 [Discord](https://discord.com/invite/NgCnkHbsGp) 频道询问。我们随时为您提供帮助！
{% endhint %}

Edgegap 分布式中继受益于我们分布式云网络，该网络覆盖数百个地点。这确保了玩家始终使用可用的最佳中继，得益于我们的专利实时遥测决策技术。

实现中继确实可能是一项复杂的任务，因此我们开发了一个解决方案来处理技术细节，让您无须操心。我们的解决方案简化了中继的设置和管理流程，使您能够专注于将其无缝集成到游戏或应用中，而无需广泛的技术专长。

***

### 为什么在 P2P 游戏中需要中继

中继服务器对 P2P 游戏开发者可能是一个有价值的工具。在 P2P 游戏中，玩家直接相互连接，无需中央服务器管理。然而，这种方式可能带来一些挑战，例如：

#### **防火墙限制**

防火墙可能阻止设备之间的 P2P 连接，使玩家难以相互连接。

#### **严格的 NAT**

严格的 NAT 会显著影响玩家参与点对点（P2P）游戏的能力。P2P 游戏依赖玩家设备之间的直接连接来实现通信和玩法，但严格的 NAT 可能限制甚至阻止这些连接。这会导致延迟增加、连接中断以及加入或托管游戏的困难。

<figure><img src="https://3334189208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-1ff4b2b8740e5c4f621e070e7524b20cb26a52b4%2FTraditional_P2P.png?alt=media" alt=""><figcaption></figcaption></figure>

中继服务器可以通过充当玩家之间的中介来帮助克服这些挑战。当玩家希望连接到另一名玩家时，他们的连接首先通过中继服务器进行路由。这样中继服务器可以处理 NAT 穿越和防火墙限制，使玩家更容易互相连接。

中继服务器还可以通过减少玩家设备的负载来帮助提高 P2P 游戏的整体性能。通过处理玩家之间的一部分网络流量，中继服务器可以减少延迟并改善整体游戏体验。

总之，中继服务器对 P2P 游戏开发者来说是一个有价值的工具，有助于克服 NAT 穿越和防火墙限制，并提升游戏的整体性能。

***

### P2P 中的服务器与客户端

在多人游戏的点对点（P2P）架构中，由于没有专用服务器来为所有玩家管理游戏，必须有一名玩家充当游戏服务器。该玩家称为“服务器”，负责管理游戏世界并在玩家之间同步所有信息。其余玩家（客户端" alt="">

将直接连接到该服务器。

***

### 入门指南

#### **实现某种大厅/匹配器**

您需要实现某种形式的大厅或匹配器来为玩家创建中继会话。别担心，最初您不需要一个功能齐全的匹配器，而是一种能够在不在游戏客户端暴露令牌的前提下自动化 API 请求的方式。可以考虑使用 [#nakama-by-heroic-labs](https://docs.edgegap.com/zh/advanced-features/managed-clusters#nakama-by-heroic-labs "mention") 在 Edgegap 集群上。

#### **与 Edgegap API 的集成**

完成上一步后，您主要需要使用 Edgegap API 执行两项简单操作：创建中继会话和删除中继会话。您的大厅/匹配器应负责实现这些操作，以授权或取消授权玩家访问中继。 [本节中有更多信息](https://docs.edgegap.com/zh/learn/distributed-relay/relay-edgegap-api).

#### **与现有传输层的集成**

在在中继上授权玩家之后，您仍需实现游戏客户端与中继之间的通信，即传输层。

为了简化您的工作，我们正着手为不同的网络代码、语言和框架做多种实现。如果您想集成我们现有的某个实现，只需遵循对应您技术栈的教程。

* [使用 Mirror Netcode 的 Unity](https://docs.edgegap.com/zh/docs/sample-projects/unity-netcodes/mirror-on-edgegap)
* Unreal 网络 - 即将推出
* [Unity Netcode for GameObjects](https://docs.edgegap.com/zh/docs/sample-projects/unity-netcodes/unity-netcode-on-edgegap)
* [Fishnet 网络](https://docs.edgegap.com/zh/docs/sample-projects/unity-netcodes/fishnet-on-edgegap)

#### **（可选）实现您自己的传输层**

如果您有兴趣为特定网络代码实现自己的传输层，可以通过遵循本指南找到详细信息和指导：

[中继实现手册](https://github.com/edgegap/distributed-relay-examples#relay-implementation-manual)

如果您对实现有任何疑问或想了解我们当前集成的路线图，欢迎随时联系我们！
