了解Edgegap的工作原理

了解Edgegap的工作原理

/

/

Arena Shooter

Godot Engine

Arena Shooter

部署至 Edgegap

已发布

已发布

已发布

竞技场射击游戏:在 Edgegap 专用服务器上运行 Dumpster Fire Labs 的 Godot 4 射击游戏,支持匹配

竞技场射击游戏:在 Edgegap 专用服务器上运行 Dumpster Fire Labs 的 Godot 4 射击游戏,支持匹配

Arena Shooter 是 Edgegap 对 Super Star Fighter 的分叉版本,后者是 Dumpster Fire Labs 使用 Godot 4.7.2 构建的自顶向下多人竞技场射击游戏。飞行员每轮都会抽取一张新的升级卡,卡牌不断叠加,直到一艘小小的初始飞船变成布满屏幕的庞然大物。

游戏的网络代码没有改变。其专用服务器已经运行了整个模拟,因此每位玩家看到的都是同一场战斗。该分叉版本在各自的文件夹中添加了一个 FIND MATCH(寻找比赛)选项卡和一个小型服务器生命周期脚本。

玩家按下 FIND MATCH 后,Edgegap 的撮合系统会对他们进行分组,并为该比赛启动一个专用游戏服务器。客户端通过安全的 WebSocket(wss://)加入该服务器,机器人补齐空位,比赛结束后服务器会自动停止。

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

平台:Windows、macOS 和 Linux(x64 和 ARM64)桌面客户端;Edgegap 上的 Linux x86_64 专用服务器。匹配已在 Windows 客户端上进行了测试。原版游戏 Super Star Fighter 由 Dumpster Fire Labs 开发;代码遵循 MIT 许可证。其音乐和徽标受到版权保护,因此该分叉版本未包含它们(资产许可证)。

工作原理

  1. 玩家按下 FIND MATCH。客户端向 Edgegap 撮合系统发送票证,并每 2 秒检查一次。

  2. 撮合系统将 2 到 4 名玩家(30 秒后若只有单人则为 1 名玩家)分为一组,并在他们附近启动一个专用服务器。服务器读取匹配到了多少名玩家。

  3. 每个匹配成功的客户端都会收到服务器地址,并通过游戏自有的直连屏幕在 wss://<host>:<port> 加入。大厅密码即为该部署的 ID,只有匹配成功的玩家才会获得。

  4. 当所有匹配到的玩家都进入后,或者在第一名玩家加入 30 秒后,比赛开始。NPC 飞行员会填补空位,凑齐 4 艘飞船,因此单人玩家也能开始游戏。

  5. 最终结果公布 20 秒后,服务器会停止自己的部署。玩家可以重新排队等待下一场比赛。

分叉版本所做的更改:

路径

功能说明

src/shared/edgegap/edgegap_server.gd

Edgegap 上的服务器生命周期:大厅密码、自动开始、NPC 填充、自动停止。在 Edgegap 部署之外不执行任何操作。

src/client/edgegap/edgegap_find_match.gd

FIND MATCH 选项卡:撮合票证,然后通过直连加入。

src/client/edgegap/edgegap_settings.gd

撮合系统 URL、身份验证令牌、配置文件和端口名称。

edgegap/Dockerfile

基于 Linux x86_64 专用服务器包构建的服务器镜像。

edgegap/matchmaker-config.json

撮合系统配置:一个 casual 配置文件,2 到 4 名玩家。

src/bootstrap.gd、src/server/server_main.gd、src/client/ui/connection_controller.gd

调用上述文件的几个单行钩子。

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

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

Top-down match in a neon Godot arena shooter: ships tagged by pilot and team, with the Godot logo.

一款使用 Godot 4 开发的霓虹竞技场射击游戏,运行在 Edgegap 专用服务器上。

分步指南

运行示例

1. 开始之前

  • 一个免费的 Edgegap 账户。测试无需信用卡。

  • 正在运行的 Docker Desktop,用于构建服务器镜像。

  • Python 3.11 或更高版本。分支的构建脚本会将 Godot 4.7.2 及其导出模板下载到项目中并进行检查,不会在系统范围内安装任何内容。您无需安装 Godot。

  • 克隆该分支。

游戏绝不需要您的 Edgegap API 令牌。客户端中仅会传入撮合服务的身份验证令牌(Auth Token),该令牌无法访问您的账户。

2. 将游戏服务器部署在 Edgegap 上

从存储库根目录下载固定版本的 Godot,并构建 Linux 专用服务器包:

python tools/build.py bootstrap

python tools/build.py build server-linux-x64 --skip-gate

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

docker build --platform linux/amd64 -f edgegap/Dockerfile -t registry.edgegap.com/<project>/arena-shooter:<tag> builds/beta-19/server-linux-x86_64

docker push registry.edgegap.com/<project>/arena-shooter:<tag>

在控制面板中,创建应用程序 godot-arena-shooter 和一个版本(配置使用 v1):

  • 您的镜像和标签,以及您的注册表用户名和令牌,以便 Edgegap 可以拉取它。

  • 0.5 vCPU 和 1 GB。

  • 一个端口:名称为 gameport,端口号 7000,协议为 WS,并开启 TLS Upgrade。客户端使用 wss:// 连接。

版本上的可选环境变量:EDGEGAP_NPC_FILL(默认值 4,0 表示关闭 NPC)、EDGEGAP_START_GRACE(30 秒)、EDGEGAP_JOIN_TIMEOUT(120 秒)以及 EDGEGAP_ROUNDS_TO_WIN(3)。服务器日志行以 EDGEGAP 开头。

3. 创建撮合器

  1. 打开 edgegap/matchmaker-config.json,并将 application.name 和 version 设置为步骤 2 中的对应值。

  2. 在控制面板中,打开 Matchmaker,选择创建 Matchmaker,上传该文件,然后点击创建并启动。

  3. 上线后,将其 API URL 和 Auth Token 复制到 src/client/edgegap/edgegap_settings.gd 中。或者保留该文件为空,并在启动客户端时设置 EDGEGAP_MATCHMAKER_URL 和 EDGEGAP_MATCHMAKER_TOKEN。

Auth Token 专用于随游戏客户端一同发布。切勿将您的 Edgegap API 令牌放入客户端中。

4. 进行一场比赛

构建 Windows 客户端:

python tools/build.py build windows --skip-gate

同一个脚本也可构建 Linux 和 macOS 客户端(clients 会构建全部四个平台版本),但只有 Windows 客户端在 Edgegap 上进行了测试。

启动两个客户端并打开连接界面的第一个标签页 FIND MATCH(寻找对局)。在两个客户端中均点击该按钮。状态会从“正在寻找玩家…”变为“已找到对局。正在您附近启动服务器…”,随后两个客户端都会加入同一个 Edgegap 服务器并进入其大厅。

当双方都加入后,对局便会开始,并包含 2 名 NPC 飞行员以凑齐 4 艘飞船。最终结算后,服务器会等待 20 秒并自动停止部署。重赛请求仍会结束该对局:请重新排队以进行下一场对局。

测试时,EDGEGAP_FIND_MATCH=1 可使客户端在启动时自动点击 FIND MATCH。

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

该分支是一个可直接参考的有效范例:您的编码 Agent 可以直接复制这些经过测试的文件,而无需从头编写。Edgegap 的 edgegap-godot 技能同样提供了与游戏无关的相同脚本版本。只需进行四处更改,即可将带有专属服务器的 Godot 游戏迁移到具备匹配功能的 Edgegap:

  1. 服务器独立运行比赛。在 Edgegap 部署上,它会读取匹配的玩家数量,在玩家加入后(或宽限期过后)开始比赛,并在游戏支持的情况下用 Bot 填补空缺席位(src/shared/edgegap/edgegap_server.gd)。

  2. 服务器自行停止。当比赛结束或无人加入时,它会向 Edgegap 注入的 ARBITRIUM_DELETE_URL 发送 DELETE 请求,从而停止计费。

  3. 客户端包含“寻找比赛”按钮。它会提交匹配票证,轮询检查直到分配服务器,然后填入地址并运行游戏现有的加入界面(src/client/edgegap/edgegap_find_match.gd,edgegap_settings.gd)。

  4. 导出新脚本。游戏的导出预设使用白名单机制,因此该分支在 export_presets.cfg 中列出了这三个 Edgegap 脚本。若不这样做,导出的构建版本会直接忽略它们。

然后以该分支的 edgegap/Dockerfile 为模板对服务器进行容器化,并按照步骤 2 和 3 创建应用版本及匹配器。

配合您的 Agent:

“加载 edgegap 技能,然后加载 edgegap-godot。以 github.com/edgegap/game-sample-godot-arena-shooter 为参考,添加一个等待匹配玩家并能停止自身 Edgegap 部署的服务器生命周期,以及一个可在 Edgegap 匹配器排队并通过游戏现有加入逻辑接入所分配服务器的‘寻找比赛’按钮。”

如需了解每个步骤的详细手动操作说明,请参阅 Godot Engine 集成指南。

6. 匹配与自动停止的工作原理

该示例的配对器配置包含一个配置文件 casual:一支 2 到 4 名玩家的队伍。30 秒后,最低人数降至 1,因此单人玩家也能获得服务器。没有延迟规则。

客户端通过几个 HTTP 调用与配对器通信,使用 Auth Token:

  • POST {API URL}/tickets,携带 {"profile": "casual", "attributes": {}}

  • 每 2 秒调用一次 GET {API URL}/tickets/{id},直到状态变为 HOST_ASSIGNED,并带有服务器的主机名和 gameport 的外部端口

  • 如果玩家取消,则调用 DELETE {API URL}/tickets/{id}

服务器在以下情况下请求 Edgegap 停止其部署,从而结束计费:

  • 最终结果产生后 20 秒(每次部署一场比赛);

  • 120 秒内无人加入;

  • 所有人离开已达 30 秒。

要调整您自己的比赛规模,请在配置中设置 min_team_size 和 max_team_size,并在应用版本上设置 EDGEGAP_NPC_FILL。当您发布新的服务器版本时,请创建一个新的应用版本并在配对器中更新 application.version(停止、编辑、启动)。Godot Engine 集成指南涵盖了为您自己的游戏设置配对的内容。

已知限制

  • 默认情况下每个 Edgegap 比赛有 4 艘飞船。游戏最多支持 32 名飞行员,但示例的匹配系统会匹配 2 到 4 名玩家,并使用 NPC 填充最多 4 艘飞船。更大的 Edgegap 比赛需要更大的 max_team_size 和 EDGEGAP_NPC_FILL;它们应该可以正常运行,但尚未在 Edgegap 上进行测试。

  • 每次部署对应一场比赛。重新比赛将结束该部署,玩家需要重新排队。

  • 加入由地址保护,而非通过票据。只有匹配成功的玩家才能获取服务器的主机名,该主机名同时附带大厅密码。服务器不会检查每个玩家的票据 ID。

  • 仅限桌面端。此分支没有 Web 导出版本。游戏本身已使用 WebSocket,因此 Web 构建应该是可行的,相关代码已编写但未经验证。此外,它还需要在匹配器配置中设置 allowed_cors_origins。

  • 无音乐或工作室徽标。上游资产许可保留了它们。音效是在代码中生成的,仍可正常播放。

测试了什么

测试于 2026 年 10 月 20 日,使用 Godot 4.7.2 和 Edgegap 匹配器 3.3.2:

  • 本地 Docker 镜像,带有模拟的 Edgegap 变量和两个机器人客户端:比赛自动开始并带有 2 个 NPC,服务器在得出最终结果后停止。

  • 直接部署(纽瓦克):两个机器人客户端通过 wss:// 进行了一场 3 回合的比赛,部署在 5.4 分钟后自行停止。

  • 匹配器:两个 Windows 客户端点击了“寻找比赛”,被分配到同一台服务器并加入,比赛随 2 个 NPC 开始。

  • 加入超时:无人加入的部署在 120 秒后自行停止。

在 Edgegap 部署之外,服务器的行为与原版完全一致,因此局域网和直连游玩依然可用。

常见问题

关于使用 Edgegap 匹配和专用服务器运行 Godot 竞技场射击游戏(Arena Shooter)示例的常见问题。

如何为 Godot 游戏添加玩家匹配功能?

通过 JSON 配置创建 Edgegap 匹配器,然后添加一个“寻找对局”(Find Match)按钮,该按钮通过 HTTPRequest 发送票据(ticket),持续检查直到分配了服务器,并加入该地址。Arena Shooter 示例在单个 GDScript 文件中实现了这一过程,并复用了游戏自有的加入界面。

Godot 游戏可以在 Edgegap 专属服务器上使用 WebSocket 吗?

是的。该示例的服务器在端口 7000 上监听 WebSocket。在应用版本上,将端口设置为启用了 TLS 升级的 WS,客户端使用 wss:// 连接到服务器的主机名。

如果只有一名玩家点击“寻找比赛”会发生什么?

30 秒后,匹配系统会将他们单独匹配,并由 NPC 飞行员填补其余空位,直至达到 4 艘飞船。在应用版本上将 EDGEGAP_NPC_FILL 设置为 0 即可关闭机器人。

比赛结束后 Edgegap 服务器会继续运行吗?

本示例中并非如此。服务器在得出最终结果 20 秒后自行停止部署,或者如果在 120 秒内没有人加入也会停止部署,因此您只需在比赛运行时付费。

客户

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

解锁

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