了解Edgegap的工作原理

了解Edgegap的工作原理

/

Unity Relays

/

Unity Relays

部署至 Edgegap

已发布

已发布

已发布

最近一次准确性审核

最近一次准确性审核

最近一次准确性审核

Unity Relay:如何通过 Edgegap 为你的 P2P Unity 多人游戏添加中继服务器

Unity Relay:如何通过 Edgegap 为你的 P2P Unity 多人游戏添加中继服务器

本指南向您展示如何将 Edgegap 的分布式中继(Distributed Relays)添加到使用 Mirror 构建的对等网络(P2P)Unity 游戏中:由一名玩家主持,其他玩家通过靠近他们的中继加入,无需端口转发,也没有 NAT 问题。

中继不是游戏服务器。它在房主玩家的游戏运行比赛的同时在玩家之间转发流量。Edgegap 通过简单的 API 调用为玩家分配最佳可用中继以用于每个会话,并在会话开启期间计费。如果您更愿意在没有任何玩家控制的权威服务器上运行比赛,请参阅 Mirror Networking。

本指南涵盖:

  1. 获取中继令牌

  2. 将编程智能体(Coding Agent)连接到 Edgegap(可选)

  3. 将 Edgegap 的中继传输(Relay Transport)添加到 Mirror

  4. 从后端创建中继会话

  5. 连接房主和玩家

  6. 分组玩家并添加中途加入者

  7. 使用两名玩家进行测试

您可以通过两种方式进行操作,也可以将它们结合使用:

  • 使用编程智能体。任何 AI 编程助手都可以根据以下提示编写后端调用和连接代码。连接到 Edgegap MCP 服务器后,它还可以为您的测试创建、读取和删除中继会话。

  • 手动操作。以下每个步骤在没有智能体的情况下也同样适用。

在这里,我们使用 Edgegap 的 Mirror 中继示例。该中继还可以通过各自的传输协议与 Netcode for GameObjects 和 Fish-Networking 一起使用。

无需信用卡。免费版包含部署真实游戏服务器所需的资源。

无需信用卡。免费版包含部署真实游戏服务器所需的资源。

分步指南

详细集成步骤

1. 开始之前

  • 一个免费的 Edgegap 账户。请验证您的电子邮箱。测试无需信用卡。

  • 一个使用 Mirror 的 Unity 项目,其中一名玩家作为主机(在同一游戏中既是主机又是客户端)。推荐使用 Unity LTS 版本。

  • 中继配置文件令牌(Relay profile token)。在控制面板中,打开中继(Relays),创建一个中继配置文件并复制其令牌。这不是您的 Edgegap API 令牌:标准 API 令牌无法用于中继 API。

  • 一个将该令牌保存在玩家设备之外的地方:您的大厅系统、匹配系统或小型后端服务。任何持有该令牌的人都可以在您的账户上创建会话。

  • 对于代理路径:从控制面板 → 用户设置 → 令牌(Dashboard → User Settings → Tokens)获取 Edgegap API 令牌。该令牌适用于整个组织,因此请像对待密码一样对待它:切勿将其放入您的项目、游戏客户端或聊天中。

Git:克隆示例需要 Git 客户端。macOS 通常已自带(Xcode 命令行工具);在 Windows 上,请安装 Git。

2. 将您的代码代理连接到 Edgegap

如果您完全手动操作,请跳过此步骤。

Edgegap MCP 服务器允许您的智能体(Agent)在您的账户上运行。对于中继(relays),它可以为玩家 IP 列表创建测试会话、读取该会话、为后加入的玩家授权并删除该会话。它还可能会指出何时权威服务器更适合您的游戏:这是正常的,中继适用于采用主机-客户端(host-client)架构构建的游戏。

Claude Code:安装 Edgegap 插件。它会同时添加 MCP 服务器和技能,并在安装过程中要求输入您的 API 令牌(存储在系统的凭据存储中):

/plugin marketplace add edgegap/edgegap-agent-skills,然后运行 /plugin install edgegap@edgegap。重启会话。

只想要 MCP 服务器,不需要插件?请改在您自己的终端中运行以下命令:claude mcp add --transport http edgegap https://mcp.edgegap.dev/mcp -H "Authorization: token YOUR_EDGEGAP_API_TOKEN" --scope user。不要两种都做,否则会出现两个 edgegap 服务器。

Cursor、VS Code 和其他支持发送标头(headers)的客户端:添加 https://mcp.edgegap.dev/mcp 并附带标头 Authorization: token YOUR_EDGEGAP_API_TOKEN,然后使用 npx skills add edgegap/edgegap-agent-skills --skill "*" 安装技能。

Claude Desktop:自定义连接器无法发送该标头,因此请改用本地服务器(Node 18+):{ "mcpServers": { "edgegap": { "command": "npx", "args": ["-y", "@edgegap/mcp"] } } }。首次使用时会要求输入令牌。

检查是否正常工作:

你有用于中继会话的哪些 Edgegap 工具?

它应该列出用于创建、读取、授权和删除中继会话的工具。

3. 将 Edgegap 的中继传输添加到 Mirror

  1. 从 distributed-relay-examples 下载 Edgegap 的 transport 组件,并将 Edgegap 文件夹复制到 Assets/Mirror/Transports 中。

  2. 选择您的 NetworkManager 游戏对象并添加 EdgegapKcpTransport 组件。

  3. 将该组件拖入 NetworkManager 的 Transport 字段中。

  4. 如果该组件显示 Relay GUI,请将其禁用:它会干扰中继连接。

正在使用示例项目?它已经配置完毕:克隆 https://github.com/edgegap/unity-mirror-relay-sample 并在 Unity Hub 中打开该文件夹即可。

4. 从后端创建中继会话

您的后端会通过一次简单的 API 调用,为每场比赛、每个玩家的公网 IP 创建一个会话(房主优先):

POST https://api.edgegap.com/v1/relays/sessions,附带请求头 Authorization: Token YOUR_RELAY_PROFILE_TOKEN 以及请求体 { "users": [ { "ip": "1.1.1.1" }, { "ip": "2.2.2.2" } ] }。

中继分配需要稍等片刻。每 2 秒轮询一次 GET https://api.edgegap.com/v1/relays/sessions/{session_id},直到 ready 为 true;或者在创建会话时传入 webhook_url,一旦中继分配完成或分配失败,Edgegap 就会调用该地址。

准备就绪后,响应中会包含玩家所需的一切信息:

  • relay.ip 和 relay.ports:中继地址,包含面向房主的 server(服务端)端口和面向其他所有人的 client(客户端)端口。

  • authorization_token:会话令牌,所有玩家均相同。

  • session_users[].authorization_token:每个玩家专属的令牌。

仅向每个玩家发送属于他们自己的值:中继地址、其对应端口、会话令牌以及他们自己的令牌。中继配置文件令牌(relay profile token)绝不能离开您的后端。

使用您的 Agent 提示词:

在我的后端编写一个用于创建 Edgegap 中继会话的端点:POST https://api.edgegap.com/v1/relays/sessions,带上从环境变量 RELAY_PROFILE_TOKEN 中读取的 Authorization: Token 请求头,并按玩家 IP 添加用户(房主优先)。每 2 秒轮询一次 GET /v1/relays/sessions/{session_id},最多 5 次,直到 ready 为 true。按 IP 匹配,向每个玩家返回中继 IP、房主的服务端端口或其他人的客户端端口、会话 authorization_token 以及 session_users 中属于该玩家自己的 authorization_token。绝不要返回中继配置文件令牌。

还没有后端?可以让您的 Agent 针对玩家的公网 IP 创建一个测试会话:它会返回相同的值。完成后请记得删除它,因为会话在开启期间是计费的。

以下是我们关于在 Unity 中结合 Mirror 使用 Edgegap 中继的视频教程:

5. 连接主机和玩家

在你的游戏中,将步骤 4 中的值设置在 EdgegapKcpTransport 上,然后启动 Mirror:

  • 中继地址(Relay address):中继 ip。

  • 会话 ID(Session ID):会话 authorization_token。

  • 用户 ID(User ID):该玩家自己的 authorization_token。

  • 中继端口(Relay port):主机使用服务器端口,其他所有人使用客户端端口。

示例通过一次调用 ChangeValue 进行设置,然后主机调用 StartHost(),其他人调用 StartClient()。

在我的 Mirror 项目中,当我的后端返回中继值后,将它们设置在 EdgegapKcpTransport 上(中继地址、来自会话 authorization_token 的会话 ID、来自此玩家 authorization_token 的用户 ID,如果我是主机则使用服务器端口作为中继端口,否则使用客户端端口),然后调用 StartHost() 或 StartClient()。向我展示在哪里设置了传输字段并返回完整文件。

主机和客户端都向外连接到中继,因此没有人需要开放端口,也没有玩家能看到其他玩家的 IP 地址。

6. 给玩家分组并添加迟到加入者

中继会话是为你已分好组的玩家创建的,因此分组发生在第 4 步之前:在你自己的大厅、Steam 大厅、Epic Online Services 大厅或 Unity 的 Lobby 服务中。无论使用哪种方式对他们进行分组,都会使用他们的公网 IP 调用你的后端。

有玩家在会话开始后加入?从你的后端在现有会话上授权其 IP,然后向他们发送相同的值。若要进行测试,可以询问你的 Agent:

Authorize this public IP on my Edgegap relay session {session_id}.

比赛结束时,从你的后端删除该会话:DELETE https://api.edgegap.com/v1/relays/sessions/{session_id}。玩家将断开中继连接,该会话的计费也将停止。

7. 双人测试

  1. 克隆 Mirror relay sample 并在 Unity Hub 中打开该文件夹。

  2. 仅用于此次本地测试:将您的中继配置文件令牌粘贴到 NetworkManager 游戏对象的 HelloWorldManager 组件上的 RelayProfileToken 中。发布之前请将其移除:在构建版本中,玩家可能会读取到它。

  3. 使用 Unity 的 Multiplayer Play Mode 或编辑器加构建版本运行两个实例。在第一个实例中启动主机 (host),然后从第二个实例加入。

  4. 两名玩家通过中继进行同一场比赛。完成后删除测试会话。

后续步骤

后续步骤

更倾向于权威服务器?无主机优势,且房主离开后对局依然继续:请参阅 Mirror Networking,并通过 Unity 匹配 SDK 添加匹配功能。

遇到问题?在 Edgegap Discord 上向我们的团队和其他工作室咨询。

常见问题

关于将 Edgegap 中继添加到点对点 Unity 多人游戏的常见问题。

什么是多人游戏中的中继服务器?

当玩家之间无法直接连接时(例如处于严格的 NAT 或防火墙之后),中继会在玩家之间转发流量。其中一名玩家的游戏主持比赛,而中继仅传递消息,因此无需开放端口,玩家也绝不会看到彼此的 IP 地址。

我应该使用中继还是专用服务器?

中继(relay)会保留您原有的点对点(peer-to-peer)网络代码,但主机拥有游戏状态:主机可以作弊、无延迟进行游戏,并且除非您的游戏支持主机迁移,否则当主机离开时比赛就会结束。Edgegap 上的权威游戏服务器消除了这些限制。当您的游戏已经采用主机-客户端架构构建,且无法迁移到专用服务器时,请使用中继。

Edgegap 的中继是否支持 Netcode for GameObjects 和 Fish-Networking?

是的。Edgegap 为 Mirror、Netcode for GameObjects 和 Fish-Networking 提供中继传输。其他网络代码可以遵循中继实施手册:中继承载不可靠的 UDP,而您的网络代码负责处理可靠性。

我可以将中继令牌放在我的游戏客户端中吗?

不。任何持有它的人都可以在您的账户上创建会话。请将其保存在您的大厅、匹配系统或后端,并且仅向每位玩家发送中继地址、其端口、会话令牌以及他们自己的令牌。

中继会话是如何计费的?

会话处于开启状态时会计费,将其删除后计费即停止。请在比赛结束时删除各个会话,并在测试完成后删除测试会话。

客户

了解更多已接入 Edgegap 的客户案例

提供 31 个从其他平台迁移至 Edgegap 的工作室案例研究。

他们选择 Edgegap 的关键原因

了解 Edgegap 自动化游戏服务器编排如何带来无缝的多人游戏体验。

费用

定价

定价

通过混合编排优化成本与性能

通过混合编排优化成本与性能

通过混合编排优化成本与性能

边缘云

按需

$0.00115

/ vCPU

/ 分钟

按分钟计费,仅按实际使用量收费

只有在玩家在线玩游戏时才需付费。0 个活动服务器 = $0

在全球 615 多个边缘云节点中按实例部署游戏服务器。零承诺。

只需添加信用卡。

边缘云

按需

$0.00115

/ vCPU

/ 分钟

按分钟计费,仅按实际使用量收费

只有在玩家在线玩游戏时才需付费。0 个活动服务器 = $0

在全球 615 多个边缘云节点中按实例部署游戏服务器。零承诺。

只需添加信用卡。

专属物理机集群 (裸金属)

预留容量

$0.0261

/ vCPU

/ 小时

按月计费,始终开启

每个主机每月 $280(12个月标准价),或按月支付每月 $350

通过无出站流量费用的专用机队托管,优化您游戏服务器的成本效益。

持久在线,24/7全天候可用,您的工作室专属。

专属物理机集群 (裸金属)

预留容量

$0.0261

/ vCPU

/ 小时

按月计费,始终开启

每个主机每月 $280(12个月标准价),或按月支付每月 $350

通过无出站流量费用的专用机队托管,优化您游戏服务器的成本效益。

持久在线,24/7全天候可用,您的工作室专属。

您的账单因费率和使用量而异;这可能会根据游戏类型、玩家人数等因素而有所不同。

您的账单因费率和使用量而异;这可能会根据游戏类型、玩家人数等因素而有所不同。

使用我们的预估计算器模拟您的用量 ->

使用我们的预估计算器模拟您的用量 ->

Edgegap 的功能与价格:边缘云与私有集群(Private Fleets)详细对比

Edgegap 的功能与价格:边缘云与私有集群(Private Fleets)详细对比

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。