了解Edgegap的工作原理

了解Edgegap的工作原理

/

/

SpaceEdge (WebGL)

Fish-Networking

SpaceEdge (WebGL)

部署至 Edgegap

已发布

已发布

已发布

SpaceEdge (WebGL):在 Edgegap 专用服务器上运行 Edgegap 的 FishNet 太空射击游戏,支持匹配

SpaceEdge (WebGL):在 Edgegap 专用服务器上运行 Edgegap 的 FishNet 太空射击游戏,支持匹配

SpaceEdge 是 Edgegap 基于 Unity 构建的针对 Fish-Networking (FishNet) 的太空射击游戏示例。该版本在浏览器中运行:玩家在 Unity WebGL 中飞行、射击并计分,每场比赛都在各自专用的 Edgegap 游戏服务器上运行。

游戏代码保持 FishNet 原样:相同的 NetworkManager、Bayou 传输、预测和 RPC。该示例在其周围添加了几个 Edgegap 脚本:一个用于启动服务器,一个用于寻找比赛,另一个用于在场景切换时保持它们处于活动状态。

没有玩家作为比赛的主机。专用服务器会校验每一次射击,控制生命值和得分,并在所有人离开后停止其自身的部署。游戏客户端不保存任何 Edgegap API 令牌。

Edgegap 的网络覆盖 615 多个边缘云节点(了解更多)。每台服务器都部署在适合其玩家的最佳可用位置,并且仅在比赛运行期间计费。

平台:浏览器中的 Unity WebGL,基于安全 WebSockets (wss://);Linux 专用服务器。README 说明 Windows 桌面构建版本也可以通过 Bayou 运行(不属于测试运行的一部分)。Unity 2021.3.45f2,FishNet 4.1.6R。在其各自许可下使用免费的 Unity Asset Store 资产(Cartoon FX、Sci-Fi Sfx、Star Sparrow、Starfield Skybox、TotalJSON)。

工作原理

  1. 玩家在浏览器中打开游戏并选择开始游戏。

  2. 直连模式(默认):客户端连接到在 MatchmakingSystem 上设置的服务器地址和端口。匹配器模式(可选):客户端向 Edgegap Matchmaker 发送票据,由其将 2 到 4 名玩家分组并在离他们较近的位置启动 Edgegap 服务器。

  3. 服务器通过普通 WebSockets 在 0.0.0.0:7770 上启动 FishNet。Edgegap 的 TLS 升级添加了安全层,因此浏览器使用 wss:// 连接到部署的主机名。无需购买证书。

  4. 玩家在 BattleScene 中飞行和射击。服务器校验每一次射击并控制生命值和得分。

  5. 如果在 120 秒内没有人加入,或者最后一名玩家离开 30 秒后,服务器将停止其自身的部署,计费也会停止。

示例做出的更改:

路径

作用

Assets/SpaceEdge/Scripts/Systems/MatchmakingSystem.cs

将开始游戏连接到直连(默认)或匹配客户端。在关闭匹配器时,它会禁用匹配客户端。

Assets/Edgegap/EdgegapMatchmakingClient.cs

匹配器模式:创建票据,等待 HOST_ASSIGNED,然后使用 wss://{fqdn}:{external port} 进行连接。延迟信标在 WebGL 中已关闭。

Assets/Edgegap/EdgegapServerLifecycle.cs

服务器构建:在端口 7770 上启动 FishNet 服务器,读取 Edgegap 注入的变量,并在房间为空时停止部署。替换了 FishNet 的 Start On Headless。

Assets/Edgegap/EdgegapPersistence.cs

在 MainMenu → BattleScene → MainMenu 的场景切换中保持 Edgegap 对象处于活动状态。

Assets/Edgegap/Editor/

命令行 Linux 服务器和客户端构建,以及场景设置。

Packages/manifest.json

将 Edgegap Unity SDK 作为 Git 包 (main) 引入,而非嵌入式副本。

Dockerfile, matchmaker-config.json

基于带有 CA 证书的 Ubuntu 22.04 服务器镜像;面向浏览器的匹配器配置文件。

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

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

Two spaceships flying over a glowing hexagon grid in FishNet's SpaceEdge sample, built for WebGL.

浏览器中的 SpaceEdge:每艘飞船都在同一个 Edgegap 专用服务器上飞行。

分步指南

运行示例

1. 开始之前

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

  • 带有 Linux Build Support (Mono)、Linux Dedicated Server Build Support 和 WebGL Build Support 模块的 Unity 2021.3.45f2。

  • 已安装并正在运行的 Docker Desktop。

  • Python 3 或任何静态 Web 服务器,用于在本地托管 WebGL 构建版本。

  • 使用 git clone 克隆该代码仓库,然后在 Unity Hub 中打开 Fishnet_v4.1.6R_WebGL_Matchmaker 文件夹。其他文件夹为旧版示例;部分示例在游戏客户端中包含了 Edgegap API 令牌,因此仅可用于本地测试。

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

2. 本地播放

通过 Tools → Edgegap → Build Linux Dedicated Server 构建服务器。构建产物将输出至 Builds/EdgegapServer/。然后在示例文件夹中,在 Docker 中运行它:

docker build --platform linux/amd64 -t fishnet-server:local .

docker run --rm -p 7770:7770 fishnet-server:local

日志会显示 Edgegap Server | Starting server on 0.0.0.0:7770. 和 Not running on Edgegap, self-stop disabled.

从 File → Build Settings 构建 WebGL 客户端,或从命令行构建:

Unity -batchmode -quit -projectPath . -executeMethod EdgegapServerBuild.BuildClient -edgegapClientTarget webgl

托管 Builds/Client/webgl,例如使用 python -m http.server 8080,在两个标签页中打开 http://localhost:8080,并在每个标签页中选择 Start Game。默认设置(localhost、7770、Direct Use Wss 关闭)将连接到本地服务器。

3. 将游戏服务器部署到 Edgegap

将镜像推送到您的 Edgegap 注册表。容器注册表页面包含您的项目、用户名和令牌:

docker login registry.edgegap.com

docker build --platform linux/amd64 -t registry.edgegap.com/<project>/fishnet-server:v1 .

docker push registry.edgegap.com/<project>/fishnet-server:v1

在控制面板中,创建一个应用程序(示例的配对器配置需要 fishnet-webgl-matchmaker)并为该镜像创建版本 v1:

  • 端口:名称 gameport,端口 7770,协议 WS,开启 TLS 升级 (TLS Upgrade)。Edgegap 会处理 TLS,因此浏览器使用 wss:// 连接,而服务器端运行普通的 ws。

  • 设置容器注册表用户名和令牌,否则部署拉取镜像将会失败。

每次构建都使用新的镜像标签,切勿使用 latest。

4. 在 Edgegap 服务器上开始游戏

从仪表板部署该版本,选择离您较近的区域。当状态为Ready时:

  1. 在 MainMenu 场景中的 MatchmakingSystem 对象上,将 Direct Address 设置为部署的主机名(<id>.pr.edgegap.net,而不是其 IP),将 Direct Port 设置为其外部端口,并勾选 Direct Use Wss。

  2. 重新构建 WebGL 客户端,提供托管服务,并在两个标签页中进行游戏。

每次部署外部端口都会改变,因此每次都需要读取它。如果无人加入,服务器将在启动 120 秒后停止部署;最后一名玩家离开后 30 秒也会停止部署。

5. 将其添加到你自己的 FishNet 游戏中

该示例是一个可用的参考:您的编码智能体可以直接复制其经过测试的文件,而无需从头编写。通过四处修改,即可使 FishNet 浏览器游戏在 Edgegap 上运行:

  1. 服务器自行启动。Assets/Edgegap/EdgegapServerLifecycle.cs 会在服务器构建中通过固定端口启动 FishNet。请在 ServerManager 上关闭 Start On Headless,这样同一场景即可同时适用于客户端和服务器构建。

  2. 服务器自行停止。同一个脚本会读取 Edgegap 注入的变量,并在没有玩家时停止部署,从而停止计费。

  3. 在场景切换时保持存活。Assets/Edgegap/EdgegapPersistence.cs 会在 FishNet 加载场景时保持 Edgegap 对象存活。如果没有它,服务器的自停止逻辑将随菜单场景一同销毁。

  4. 浏览器安全连接。运行在 7770 端口的 Bayou、应用版本上带有 TLS Upgrade 的 WS 端口,以及通过 wss:// 连接到主机名的客户端(MatchmakingSystem.cs、EdgegapMatchmakingClient.cs)。

然后以示例的 Dockerfile 为模板对服务器进行容器化,并按照步骤 3 创建应用版本。

配合您的智能体:

"加载 edgegap 技能,然后加载 edgegap-fishnet。以 github.com/edgegap/netcode-game-sample-unity-fishnet-hashgrid/tree/main/Fishnet_v4.1.6R_WebGL_Matchmaker 为参考,将我的 FishNet 游戏转换为 WebGL 专属服务器游戏:7770 端口上的 Bayou、Edgegap 服务器生命周期、持久化和匹配客户端脚本、关闭 Start On Headless、客户端通过 wss 连接到主机名,以及一个没有延迟规则且在 allowed_cors_origins 中包含我的 Web 源的匹配器配置。"

如需手动查看每个步骤的详细信息,请参阅 Fish-Networking 集成指南。有关适用于任何 Unity 网络代码的浏览器规则,请参阅 Unity WebGL。

6. 开启 Edgegap Matchmaker

撮合服务(Matchmaker)将玩家分组,在他们附近启动一个 Edgegap 服务器,并将该服务器地址提供给每个客户端。在示例中,该功能默认关闭,直到您将其勾选。

  1. 在 matchmaker-config.json 中,将 application.name 和 version 设置为您的应用和版本,并在 allowed_cors_origins 中列出提供 WebGL 构建版本服务的所有网址(该文件中已有 http://localhost:8080)。

  2. 在控制面板中,打开 Matchmaker,选择 Create Matchmaker,上传该文件并选择 Create and Start。

  3. 在 MainMenu 中,将 API URL 和 Auth Token 复制到 Edgegap 对象的 Edgegap 匹配 Client 上的 Base Url 和 Auth Token 中。Auth Token 可以安全地随客户端一同发布。在 MatchmakingSystem 上勾选 Use Edgegap Matchmaker。

  4. 重新构建客户端,从允许的来源提供服务,打开两个标签页并在两处都选择 Start Game。

针对网页端游戏的两个规则,已包含在示例的配置中:

  • 无延迟规则。浏览器无法 ping 通 Edgegap 的延迟信标(latency beacon),因此 Edgegap 会根据玩家的 IP 来部署服务器。

  • 列出您的来源。如果未将它们添加到 allowed_cors_origins 中,浏览器将拦截撮合服务的回复。

casual 配置文件匹配 2 到 4 名玩家。当您发布新的服务器构建版本时,推送新标签(tag),创建新的应用版本,然后在撮合服务中依次点击 Stop → Edit application.version → Start。

已知限制

  • 使用两名玩家进行测试。该配置在 30 秒后会扩展为 1 名玩家,但在 Edgegap 的测试中,单人玩家只有在票证接近 5 分钟到期时才能获取服务器。

  • 免费套餐。匹配系统每 3 小时重启一次(URL 和令牌保持不变),并且一次只能运行一个部署。被遗忘的测试部署会阻止匹配。

  • 服务器上尚未进行票证检查。服务器不会检查正在连接的客户端是否持有比赛的有效票证之一(MM_TICKET_IDS),并且没有回填机制。对于实际游戏而言,这两者都是接下来的步骤。

  • 直连模式是手动的。如果不使用匹配系统,您需要将每个部署的主机名和端口复制到客户端并重新构建。

测试了什么

于 2026 年 10 月 15 日在 Edgegap 上进行了端到端测试,配置包括:Unity 2021.3.45f2、FishNet 4.1.6R、Bayou、带有 3.5.6 版本中发布的 POST 修复补丁的 Edgegap Unity SDK 3.5.5,以及免费套餐上的 matchmaker 3.3.2:

  • 撮合系统(Matchmaker):两个 WebGL 标签页成功匹配,分配到同一服务器,通过带有 TLS 升级的 wss:// 成功连接并进行游戏。

  • 自动停止(Self-stop):比赛结束后,服务器自行停止了部署。

  • 本地(Local):Docker 服务器记录日志 Starting server on 0.0.0.0:7770.,并在 localhost 上接收 WebGL 客户端连接。

2026 年 10 月 21 日,该示例已迁移至 SDK 的 main 分支(3.5.6 或更高版本),其中包含相同的修复。通过 Bayou 连接的桌面客户端:应该可以正常工作,但未包含在本次测试运行中。

常见问题

关于在 Edgegap 上通过浏览器运行 FishNet 的 SpaceEdge 示例的疑问。

FishNet WebGL 游戏可以连接到专用服务器吗?

是的,使用 Bayou WebSocket 传输即可。服务器在端口 7770 上运行普通 WebSocket,Edgegap 的 TLS Upgrade 添加了安全层,浏览器使用 wss:// 连接到部署的主机名。SpaceEdge 正是这样做的。

在线游玩 SpaceEdge 需要使用 Edgegap Matchmaker 吗?

不。默认情况下,示例会直接连接到您设置的服务器地址和端口,因此您可以针对从控制面板启动的部署进行测试。勾选“Use Edgegap Matchmaker”(使用 Edgegap 匹配器)可让玩家自动分组并连接。

SpaceEdge 客户端是否持有 Edgegap API 令牌?

不。在配对(matchmaker)模式下,它仅使用配对器的身份验证令牌(Auth Token),这可以安全地打包到客户端中。同一代码库中的旧文件夹会从客户端调用 Edgegap API,因此这些文件夹仅用于本地测试。

为什么匹配系统在 Unity 2021.3 上会失败?

在 Unity 2022.3 之前,Edgegap Unity SDK 3.5.5 及更早版本发送的工单 JSON 会被匹配系统拒绝并返回 HTTP 400 错误。请使用 SDK 3.5.6 或更高版本;该示例跟踪 SDK 的 main 分支。

客户

了解更多已接入 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 行

解锁

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