了解Edgegap的工作原理

了解Edgegap的工作原理

/

Unity 服务器浏览器

Unity 服务器浏览器

部署至 Edgegap

已发布

已发布

已发布

最近一次准确性审核

最近一次准确性审核

最近一次准确性审核

Unity 服务器浏览器:如何通过 Edgegap 为你的 Unity 多人游戏添加在线大厅

Unity 服务器浏览器:如何通过 Edgegap 为你的 Unity 多人游戏添加在线大厅

本指南向您展示如何通过 Edgegap 的服务器浏览器(Server Browser),为已在 Edgegap 专用游戏服务器上运行的 Unity 多人游戏添加按需在线大厅:每位玩家预订一个席位并自动连接到就绪的服务器,无需任何人输入地址。

一旦您的游戏服务器容器化,Edgegap 只需通过一个简单的 API 调用即可将其部署到全球 615+ 个边缘云节点(按需部署),并完全按使用量计费:无需租用、配置整台服务器,也无需在比赛间隔期间保持其运行。对于预留容量的持久性服务器,Edgegap 提供专用舰队(Private Fleets)。Edgegap 的對局配對以此为基础构建,并且是可选的。

服务器浏览器是介于玩家和服务器之间的托管服务。游戏客户端通过它预订席位 (1)。每台服务器自行注册、报告其空闲席位,并通过心跳保持可见 (2)。然后玩家使用您的网络代码直接连接到服务器 (3)。扩缩容策略会启动服务器,以确保始终有可用容量 (4)。

Server Browser call flow: game clients reserve seats through the Server Browser, dedicated servers register and send keep-alives, players connect to the server with their netcode, and a scaling policy deploys servers

本指南涵盖:

  1. 为您的游戏准备一个正常工作的 Edgegap 应用版本

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

  3. 安装 Edgegap 的 Unity SDK

  4. 添加集成代码

  5. 将脚本添加到您的场景中

  6. 创建您的服务器浏览器

  7. 使用扩缩容策略部署您的服务器

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

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

  • 使用编程智能体。任何 AI 编程助手都可以根据步骤 4 中的两个提示编写集成代码。连接到 Edgegap MCP 服务器后,它还可以构建、推送和部署您的服务器。您只需在 Unity 和 Edgegap 仪表板中进行点击操作,并进行试玩测试。

  • 手动操作。下面的每个步骤也可以在没有智能体的情况下完成。

在此,我们使用 Mirror 的台球(Billiards)示例。任何 Unity 网络代码的运作方式都是相同的。

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

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

1. 开始之前

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

  • 游戏服务器的一个正常运行的 Edgegap 应用版本:即您至少部署并加入过一次的服务器。服务器浏览器(Server Browser)会部署并填充该服务器,因此它需要一个功能完备的容器化游戏服务器才能实现端到端运行。如果您目前还没有,请参考我们的指南:

  • 上述指南中提到的 Edgegap 针对 Unity 的游戏服务器构建工具插件,用于在步骤 7 中重新构建您的服务器。

  • 对于 Agent 路径:需要一个 Edgegap API 令牌,可从 控制面板 → 用户设置 → 令牌(Tokens) 获取。该令牌在组织范围内有效,因此请妥善保管,将其视为密码:切勿将其放入您的项目、游戏客户端或聊天中。

Git:Unity 需要在您的 PATH 环境变量中配置 Git 客户端(2.14.0 或更高版本),以通过 Git URL 安装程序包(如 Edgegap SDK)。macOS 通常已自带(Xcode 命令行工具);在 Windows 上,请安装 Git。

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

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

Edgegap MCP 服务器允许您的智能体在您的账户上创建应用和版本、部署服务器以及读取日志。Edgegap 的智能体技能尚未涵盖服务器浏览器(Server Browser),因此集成代码来自步骤 4 中的两个提示词;但这些技能仍然有助于构建和部署。

Claude Code(在您自己的终端中运行,这样令牌就绝不会通过聊天传递):

claude mcp add --transport http edgegap https://mcp.edgegap.dev/mcp -H "Authorization: token YOUR_EDGEGAP_API_TOKEN" --scope user

然后安装技能:/plugin marketplace add edgegap/edgegap-agent-skills,接着运行 /plugin install edgegap@edgegap。重启会话。

Cursor、VS Code 和其他可发送请求头的客户端:添加 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 的 Unity SDK

服务器浏览器(Server Browser)是 Edgegap Unity SDK 的一部分,与用于构建和部署服务器的插件是相互独立的软件包。

  1. 在 Unity 中,选择 Window → Package Management → Package Manager,点击 +,然后选择 Add package from git URL,粘贴 https://github.com/edgegap/edgegap-unity-sdk.git 并点击 Add。

  2. 在 SDK 的 Samples 选项卡中,导入 Server Browser - Auto-Assign。它会添加两个脚本:一个用于预留席位并将服务器地址传递给游戏的客户端处理程序(client handler),以及一个用于在服务器浏览器中注册您的服务器并报告其空闲席位的服务器处理程序(server handler)。

该 SDK 几乎完成了所有工作。仅剩三个与网络代码相关的部分需要您自行处理:将玩家连接到所分配服务器的代码行、告知服务器哪个玩家加入的简短握手,以及在玩家离开时释放其席位。步骤 4 将添加这些内容。

4. 添加集成代码

适用于任何 AI 编码助手的两个提示词,用于为你的网络代码编写相应代码。下面的视频展示了它们在 Mirror 的台球(Billiards)示例上的应用效果。

提示词 1,审查你的项目(只读):

“只读模式,不更改代码。我正在 Unity 项目中集成 Edgegap Server Browser(自动分配功能):在运行时,它会为我的客户端提供一个预留服务器的地址(FQDN)和一个外部端口,并且我的服务器必须通过玩家 ID 确认每位玩家。请查找并告知我,需包含文件路径和行号:1) 启动客户端连接的方法,以及设置服务器地址和端口的具体字段,外加当前使用的传输层(transport);2) 我的网络代码如何从客户端向服务器发送自定义小消息并在服务器上为其注册处理器;3) 客户端完成连接时触发的事件,以及在客户端启动时该事件是否会被重置(以便我知道是否应在启动客户端之后再进行订阅);4) 玩家断开连接时在服务器上触发的事件,以及它如何识别该连接。请首先查看类似 NetworkManager 的类及其传输层。对照项目逐一确认。”

提示词 2,编写集成代码:

“根据上述审查结果,为 Edgegap Server Browser 自动分配集成进行三处更改,无需派生子类或替换现有网络代码的管理器。1) 在 Assets/Scripts/ 中创建一个独立的 MonoBehaviour EdgegapPlayerConnector(静态 Instance,DontDestroyOnLoad),并包含一个携带字符串类型 playerId 的小型网络消息。在服务器端,于 Start() 中注册其处理器:存储连接与 playerId 的映射关系,并调用 ServerBrowserServerHandler.Instance.OnPlayerJoined(playerId)。公开 SubscribeClientConnected() 方法,一旦客户端连接成功就发送 ServerBrowserClientHandler.Instance.LocalPlayerId,该方法可在客户端启动后安全调用。2) 在示例的 ServerBrowserClientHandler.cs 中,在运行时生成 LocalPlayerId(新的 GUID)并用于座位预留;座位预留完成后,将分配的 FQDN 设置为网络地址,将外部端口转换为当前传输层所需的类型并进行设置,启动客户端,然后调用 SubscribeClientConnected()。3) 在服务器端,订阅审查中确定的断开连接事件;查找断开连接所对应的 playerId,按照在 SDK 源码中查看到的函数签名调用 ServerBrowserServerHandler.Instance.OnPlayerAbandoned,并移除该记录项。做好缺失条目和缺失处理器的防御性保护。请返回完整的文件内容。”

Connect flow: read and set the address, read and set the external port, then start the client; with Mirror, the network address on the Network Manager, the port on the active PortTransport, and StartClient()Disconnect flow: detect the disconnect, look up the player, release the reservation; with Mirror, OnDisconnectedEvent and the connection ID to player ID mapping on NetworkServer, then OnPlayerAbandoned on the server handler

审查过程能为你发现网络代码中的特殊机制。例如在 Mirror 中,客户端连接事件会在客户端启动时被重置,因此连接器要在启动客户端之后才进行订阅。如果不释放座位,就会造成座位泄漏,服务器最终会报告无空余座位。

以下是我们使用 Mirror 的台球示例制作的 Edgegap Unity 服务器浏览器视频教程:

5. 将脚本添加到您的场景中

在 Unity 中,脚本挂载到游戏对象上才会生效。在您的游戏场景中,选择 GameObject → Create Empty 三次:

  1. Edgegap Player Connector:添加助手创建的连接器脚本。

  2. Server Browser Server Handler:添加 Server Browser Server Handler 组件。

  3. Server Browser Client Handler:添加 Server Browser Client Handler 组件。

暂时将处理程序的字段留空:它们将在步骤 6 中填充。

6. 创建您的服务器浏览器

  1. 在 Edgegap 控制面板中,打开服务器浏览器(Server Browser)并创建一个,例如命名为 quickstart,使用 Simple Example 配置。

  2. 启动它并等待其上线。在免费层级中,每次启动后它会在共享测试集群上运行 3 小时,这对于测试来说足够了。

  3. 打开其详细信息并复制 API URL、服务器令牌(server token)和客户端令牌(client token)。

  4. 在 Unity 中,将 API URL 和服务器令牌粘贴到服务器处理器中,并将相同的 API URL 和客户端令牌粘贴到客户端处理器中。调换令牌会导致连接错误。保存场景。

服务器令牌可以在您的服务器浏览器上执行所有操作,因此它只能存在于运行在 Edgegap 上的服务器中,绝不能出现在玩家的设备上。将其粘贴到组件中是为了保持本次测试的简单性;在生产环境中,请将其设置为应用程序版本中的变量,这会覆盖检视面板(Inspector)的值,并使其远离您的项目。客户端令牌仅用于预留席位和读取状态。

Two setups: with player services, the game client authenticates with your player services, which reserve the seat; without player services, the game client reserves the seat with the Server Browser directly; in both, the game server polls the Server Browser and the client connects to it

在生产环境中,许多工作室会让玩家首先登录他们自己的玩家服务,由该服务为玩家预留席位。

7. 使用弹性伸缩策略部署您的服务器

您的服务器现在会读取服务器浏览器(Server Browser)的 URL 和令牌,因此需要一个新的应用版本:早期版本不包含这些内容。

  1. 使用 Edgegap 插件构建、容器化并上传您的服务器,完全按照服务器指南中的说明操作(或选择从源码构建 (Build from source) 一次性运行这三项)。使用您的智能体:“构建 Linux 服务器,使用新标签推送它,并使用相同的端口创建一个新的应用版本。”

  2. 在您的服务器浏览器上,创建一个名为 on-demand 的扩缩容策略 (scaling policy):将最小活动实例数 (Minimum Active Instances) 设置为 1,选择您的应用程序和新版本,并将专用主机 (Private Hosts) 留空以便部署到 Edgegap 的云端。将其保存为激活状态。

  3. 一分钟内,该策略就会部署您的服务器。其日志显示它正在向服务器浏览器注册、报告健康状态,并显示有空闲席位可被发现。您的按需大厅现已上线。

至少保持一个活动实例可确保始终有一台服务器在运行,随时供玩家加入。测试完成后请记得它仍在运行:停用该策略即可将其停止。

8. 双人测试

  1. 使用 Unity 的 Multiplayer Play Mode 或编辑器加构建版本运行两个玩家。

  2. 点击 Play。每个玩家预留一个席位,获取服务器地址并连接,服务器确认每个玩家并占用一个席位。

  3. 两个玩家进入同一个云服务器,各自的操作都会同步到对方的窗口中。

Logs of two players: each reserves a seat on the same Edgegap server, then joins it

新分配的服务器可能还需要稍等片刻才能启动完成,因此对于生产环境,请添加连接重试机制:尝试几次,每次间隔数秒。

后续步骤

后续步骤

让玩家自行选择。除自动分配外,玩家还可以按地区、空位、游戏模式或服务器报告的任何元数据搜索和浏览服务器,并选择其一。扩缩容策略还可以使备用服务器保持温启动状态以供启动使用,或者通过添加主机 ID 将服务器固定到专属机队。

比起玩家选择,更倾向于严格的规则?请参阅 Unity 對局配對 SDK。在 Unreal Engine 上,服务器浏览器通过 Betide Studios 的 Edgegap 集成套件运行。

遇到困难?请在 Edgegap Discord 上向我们的团队和其他工作室寻求帮助。

常见问题

关于在 Unity 多人游戏中添加 Edgegap 服务器浏览器的常见问题。

在多人游戏中,什么是服务器浏览器?

玩家可以加入的实时游戏服务器列表,包含其空余席位以及区域或游戏模式等设置。Edgegap 的服务器浏览器是一项托管服务:服务器注册并上报其席位,玩家预留席位并进行连接,弹性伸缩策略则根据需要启动服务器。

我应该使用服务器浏览器还是快速匹配?

当玩家需要自行选择服务器或直接加入正在运行的大厅时,请使用服务器浏览器;当需要根据你的规则(例如技术水平或队伍平衡)来决定谁与谁一起游戏时,请使用匹配系统。Edgegap 同时提供这两种功能,并且它们可以协同工作:匹配系统启动服务器,服务器浏览器则负责填满这些服务器。

Edgegap 的 Server Browser 是否支持 Mirror、Netcode for GameObjects 和 Fish-Networking?

是的。服务器浏览器不依赖于您的网络代码。只有三个部分发生变化:连接到分配的地址和端口、将玩家 ID 发送到服务器,以及在玩家离开时释放席位。

服务器令牌和客户端令牌之间有什么区别?

服务器令牌可以使用所有服务器浏览器(Server Browser)方法,并且仅应放置在您的游戏服务器中,理想情况下作为应用程序版本变量。客户端令牌仅用于预订席位和读取状态,适用于游戏客户端或您的玩家服务。两者都不是您的 Edgegap API 令牌。

Edgegap 的服务器浏览器费用是多少?

测试是免费的,在共享集群上运行,每次启动后可运行 3 小时。您的扩缩容策略部署的服务器在其运行期间按每 vCPU 每分钟计费,因此最少保留一个活动实例意味着始终有一台服务器在运行。

客户

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

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

他们选择 Edgegap 的关键原因

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

费用

定价

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

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

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

边缘云

按需

$0.00115

/ vCPU

/ 分钟

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

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

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

只需添加信用卡。

边缘云

按需

$0.00115

/ vCPU

/ 分钟

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

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

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

只需添加信用卡。

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

预留容量

$0.0282

/ vCPU

/ 小时

按月计费,始终开启

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

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

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

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

预留容量

$0.0282

/ vCPU

/ 小时

按月计费,始终开启

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

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

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

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

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

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

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

Eggegap 的功能和价格:Edge Cloud 与 Private Fleets 的详细对比

Eggegap 的功能和价格:Edge Cloud 与 Private Fleets 的详细对比

对比

免费试用

边缘云

自有车队

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

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

对比

免费试用

边缘云

自有车队

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

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

对比

免费试用

边缘云

自有车队

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

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