# 中继（P2P）

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

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

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

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

***

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

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

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

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

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

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

<figure><img src="/files/7ab4dcf20fa1c92ce07326ec55695218a8410fac" alt=""><figcaption></figcaption></figure>

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

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

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

***

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

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

将直接连接到该服务器。

***

### 入门指南

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

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

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

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

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

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

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

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

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

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.edgegap.com/zh/learn/distributed-relay.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
