了解Edgegap的工作原理

了解Edgegap的工作原理

/

Fish-Networking

Fish-Networking

部署至 Edgegap

已发布

已发布

已发布

最近一次准确性审核

最近一次准确性审核

最近一次准确性审核

Fish-Networking:如何为您的多人游戏集成和托管专用服务器,并添加對局配對功能

Fish-Networking:如何为您的多人游戏集成和托管专用服务器,并添加對局配對功能

本指南将向您展示如何在 Edgegap 的专用游戏服务器上托管使用 Fish-Networking (FishNet) 构建的游戏,然后添加对局匹配,从而自动对玩家进行分组并将其连接到离他们最近的服务器。

一旦您的游戏服务器完成容器化,Edgegap 即可通过简单的 API 调用将其按需部署到全球 615+ 个边缘云节点,并完全按用量计费:无需租用整台服务器、预置资源或在比赛间隙保持运行。对于需要预留容量的持久服务器,Edgegap 提供了 Private Fleets。Edgegap 的對局配對功能构建于此之上,并且是可选的。

本指南涵盖:

  1. 准备 Unity、FishNet、您的 Edgegap 账户以及容器化工具

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

  3. 让您的 FishNet 游戏为专用服务器做好准备

  4. 构建并容器化您的游戏服务器

  5. 部署测试服务器并连接到该服务器

  6. 添加对局匹配(可选)

  7. 使用两名玩家测试完整闭环

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

  • 使用编码智能体。将 Claude Code、Cursor 或其他智能体连接到 Edgegap MCP 服务器及其智能体技能。智能体会编辑您的项目、构建并容器化服务器、进行部署并编写对局匹配代码。您只需在 Unity 和 Edgegap 控制面板中进行点击操作,并进行测试游玩即可。

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

对于构建和容器化服务器,Edgegap 的 Unity 自动化游戏服务器构建工具插件是可选的。它可以通过 Unity 编辑器中的按钮构建您的服务器、将其容器化并部署到云端,这是首次查看服务器上线的最快捷方式(步骤 4,选项 A)。

在此,我们使用 FishNet 的 HashGrid 演示,该演示随 FishNet 一起提供,并作为带有 Tugboat 传输协议的专用服务器运行。任何 FishNet 项目的工作方式都相同。使用的是其他网络代码?请查看 Unity 引擎了解所有可选方案。

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

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

1. 开始之前

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

  • 已安装 Linux 构建模块的 Unity Engine。 Edgegap 推荐使用 LTS 版本。

    • 从 Unity Hub 添加以下模块:Linux Build Support (Mono)、Linux Build Support (IL2CPP) 和 Linux Dedicated Server Build Support。如果是网页浏览器游戏,请添加 WebGL Build Support。添加后请重启 Unity。

    • FishNet 4 适用于 Unity 2021.3 及更高版本。在 2022.3 之前的版本上,Edgegap 的 Unity SDK 需要一个用于匹配(matchmaking)的小补丁,代理(agent)会自动应用该补丁(步骤 6)。

    • 安装 Git 客户端(2.14.0 或更高版本)并将其添加到您的 PATH 环境变量中。Unity 需要通过它来从 Git URL 安装软件包,例如 Edgegap 插件。

  • 项目中需包含 Fish-Networking 4。 对于 HashGrid 演示:从 Unity Asset Store 获取 FishNet(Add to My Assets),然后在 Window → Package Manager → My Assets 中选择 Import。请参阅 FishNet 的安装指南。

  • 处于运行状态的容器化工具。 我们推荐使用 Docker Desktop,并在构建时保持安装且处于运行状态。

    • 其他容器工具也可以与 Edgegap 配合使用,但本指南仅涵盖 Docker。

  • 对于代理途径:一个 Edgegap API 令牌,可从 Dashboard → User Settings → Tokens 获取。该令牌在整个组织范围内有效,因此请像对待密码一样妥善保管:切勿将其放入您的项目、游戏客户端或聊天中。

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

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

Edgegap MCP 服务器允许您的 Agent 在您的账户上创建应用程序和版本、部署服务器、读取日志并生成撮合系统配置。该 Agent 技能为它提供了经过测试的 FishNet 工作流、开箱即用的 FishNet C# 模板、Dockerfile 以及已知注意事项。

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 应用程序。”

返回空列表也是正常的。如果提示关于令牌的错误,通常意味着请求头被错误读取为 token token ...。

3. 准备好用于专属托管的 FishNet 服务器

在 Edgegap 上,没有任何玩家担任比赛的主机。无头专属服务器(headless dedicated server)掌管游戏,因此该专属服务器必须自行启动、监听固定端口,并在比赛结束时停止。

使用您的智能体(Agent):

“加载 edgegap-fishnet 技能,并使该 FishNet 项目适配专属服务器:服务器构建版本在 0.0.0.0:7770 上以无头模式启动服务器,客户端连接时生成玩家,Edgegap 对象在场景切换时得以保留,并且服务器在比赛结束时自行停止。添加 Edgegap 服务器生命周期和匹配客户端脚本。然后检查它是否仍可在本地正常运行(一个服务器和一个客户端)。”

智能体会关闭 Start On Headless 并让 Edgegap 生命周期脚本启动服务器,该配置已在 Edgegap 上通过验证。它还会从客户端移除所有 Edgegap API 调用,这是较旧的 FishNet 示例中的一种模式,会导致您的 API 令牌随游戏一同分发。

手动操作,在您的 NetworkManager 上:

  • 仅保留一个服务器启动器。在 ServerManager 中保持 Start On Headless 为开启状态,以便服务器构建版本自行启动。如果某个脚本也会启动服务器,请将其关闭。

  • NetworkHudCanvas → Auto Start Type: Disabled。如果设置为 Server 或 Host,它将在服务器构建版本中启动第二个服务器。

  • Tugboat:保留其端口(默认是 7770/UDP),并将 IPv4 绑定地址留空(表示所有接口)。对于浏览器 (WebGL) 游戏,请使用 Bayou,端口同样为 7770。

  • 在 NetworkManager 上保持勾选 Run in Background 和 Don't Destroy on Load。

  • 为远程客户端生成玩家(使用 FishNet 的 PlayerSpawner),而不是为主机玩家生成。

  • 在 ServerManager 中,将 Frame Rate 设置为 30 到 60。如果不限制帧率,无头服务器将使一个 CPU 核心以 100% 的占用率运转。

  • 确保您的 FishNet 场景已在 Build Settings 中启用。只有启用的场景才会被构建。

HashGrid 演示

打开 Assets → FishNet → Demos → HashGrid → Scenes → HashGrid,将其添加到 Build Settings 中,并检查 NetworkManager 是否具有 Tugboat 组件(如果没有则添加)。该演示已配置为专属服务器。

先在本地进行测试:使用一个编辑器(或构建版本)作为服务器,另一个作为连接到 localhost 的客户端,配合 Unity 的 Multiplayer Play Mode 进行测试。切勿容器化在 localhost 上无法正常运行的游戏。

4. 构建并容器化您的服务器

Edgegap 在容器内运行您的 Linux 服务器构建版本。可以使用任一选项,或两者结合使用:例如,首次部署使用插件,之后的每次构建使用您的智能体(agent)。

选项 A(可选):Edgegap 适用于 Unity 的自动化游戏服务器构建工具插件。这是实现首次云部署的最快方式,只需点击按钮即可完成。它使用 Docker 对您的服务器进行容器化。下面的视频展示了在 HashGrid 演示中采用此路径的操作。

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

  2. 打开 Tools → Edgegap Server Hosting,登录,并在 Connect your Edgegap Account 下粘贴系统提供的令牌(token)。选择 Validate Token。

  3. 选择 Build Server。构建输出将保存在 Builds/EdgegapServer/ServerBuild 中。

  4. 在 Docker 运行的情况下,选择 Validate,然后选择 Containerize with Docker。可选操作:Deploy Local Container 并将客户端连接到该容器。

  5. 选择 Upload Image and Create App Version。在浏览器中,将端口设置为与 Tugboat 匹配:7770、UDP,名称为 gameport(Bayou:WS 并开启 TLS Upgrade)。提交。

选项 B:交给您的智能体。

“构建 Linux 专用服务器,使用适用于 linux/amd64 的 edgegap-fishnet Dockerfile 将其容器化,添加新标签后推送到我的 Edgegap 容器镜像仓库(Container Registry),然后创建应用及应用版本,端口为 7770 UDP,名称为 gameport。”

智能体会要求您自行运行 docker login registry.edgegap.com,并使用来自容器镜像仓库页面的用户名和令牌,从而避免这些凭据出现在聊天记录中。请确保应用版本已配置镜像仓库凭据:若未配置,部署将会失败并提示“Unable to pull image from registry”。

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

HashGrid 快捷方式:跳过构建。若想在构建自己的服务器之前在 Edgegap 上查看演示,可以使用现成的 HashGrid 应用版本:在 Edgegap 控制台中创建一个应用程序,然后点击 Fish-Net Hashgrid 按钮。它会自动填入版本信息,端口为 7777/UDP。提交后,在步骤 5 中进行部署。

以下是我们针对 Unity 的 Edgegap 插件视频教程,使用了 FishNet 的 HashGrid 演示:

5. 部署测试服务器并连接

在添加配对功能之前,先手动启动一个服务器,以验证镜像、端口以及网络代码是否正常工作。以下任何一种方式均可:

  • 通过插件:选择您的应用和版本,然后选择 Deploy to Cloud。

  • 通过控制面板:在 Edgegap 控制面板 中打开您的应用版本,选择 Deploy,挑选一个离您较近的位置,然后进行部署。

  • 通过您的智能助手:“在离我较近的位置部署我最新的 Edgegap 版本,等待部署就绪,向我展示日志,并提供 IP 地址和外部端口。”

当部署状态显示为 Ready 时,复制其 Host IP 和 External Port。在 NetworkManager 上,将 IP 粘贴到 Tugboat 的 Client Address 中,将外部端口粘贴到其 Port 中,点击 Play,然后在 HUD 上选择 Client。浏览器 (Bayou) 客户端连接时需开启 Use WSS,并连接到该部署的主机名。每次部署的外部端口都会发生变化,因此每次都需要重新查看。服务器在显示 Ready 之后,可能最多需要一分钟才能接收玩家加入。

完成后请停止部署(在插件中使用 Stop Last Deployment,或向您的智能助手发出指令)。免费套餐一次只能运行一个部署,遗忘的测试服务器会阻碍配对功能。

在这里,您手动选择了位置并分发了地址。要自动对玩家进行分组并在他们附近启动服务器,请添加配对器。

6. 添加匹配功能

Edgegap 的撮合系统(matchmaker)是一项托管服务:玩家发送票证,它会根据您的规则(比赛规模、队伍、延迟、技术水平、模式)对玩家进行分组,在离他们较近的地点部署您的服务器,并将地址返回给每个客户端。

使用您的代理(agent):

“为我的应用版本生成 Edgegap 撮合配置:一组 2 到 4 名玩家,并允许单个玩家在 30 秒后获得服务器,以便我单独测试。将其保存为 matchmaker-config.json。”

然后,在控制面板中(此步骤没有 API):

  1. 打开 Matchmaker 并选择 Create Matchmaker。

  2. 为其命名,上传 matchmaker-config.json,然后选择 Create and Start。

  3. 当状态变为 ONLINE 时,复制 API URL 和 Auth Token。Auth Token 可以安全地随游戏客户端一同发布:它不会提供对您 Edgegap 账户的访问权限。

回到您的代理:

“将撮合 API URL 和 Auth Token 填入 EdgegapMatchmakingClient,将我的‘开始游戏’按钮连接到 FindMatch,然后重新构建并推送服务器,创建一个新的应用版本,并告诉我需要在撮合系统中更新什么。”

在 2022.3 之前的 Unity 版本中,代理还会对 Edgegap 的 Unity SDK 进行补丁修复,否则该 SDK 发送的票证会被撮合系统拒绝。

手动操作:请遵循我们文档中的 Unity matchmaking guide。

浏览器 (WebGL) 游戏:撮合系统中不得设置延迟规则(浏览器无法发送延迟 ping),并在 allowed_cors_origins 中列出提供您构建版本托管服务的所有源。

当您发布新的服务器构建时,请在撮合配置中更新 application.version(停止、编辑、启动),否则比赛将继续部署旧的构建版本。

7. 与两名玩家一起测试完整循环

  1. 请确保没有测试部署仍在运行。

  2. 运行两个客户端:编辑器加一个构建版本、两个 Multiplayer Play Mode 玩家,或者两个浏览器标签页(点击前请将每个标签页切换到前端)。

  3. 在两者中都选择 Find Match。状态会从 searching(搜索中)变为 match found(找到匹配),再到 host assigned(已分配主机),然后两个客户端都会连接到同一台服务器。

  4. 离开比赛。服务器会记录其正在停止,并且该部署会从控制台中消失。正是这种自动停止机制使你在无人游玩时保持零费用账单。

在免费层中,匹配器在每次启动 3 小时后停止(可从控制台重新启动),部署在 60 分钟后停止,并且一次只能运行一个部署。

后续步骤

后续步骤

使用其他 Unity 网络代码?请参阅 Unity Engine。更倾向于玩家浏览的大厅?请参阅 Server Browser for Unity。

准备上线?让您的智能体运行 edgegap-launch 技能的检查清单:版本推出、重启策略、最长持续时间、成本控制。

遇到困难?让您的智能体加载 edgegap-troubleshoot,或者在 Edgegap Discord 上向我们的团队和其他工作室寻求帮助。

常见问题

关于在 Edgegap 专用服务器上托管 Fish-Networking 游戏(无论是否使用匹配功能)的常见问题。

Fish-Networking 支持专用服务器吗?

是的。针对 Linux 专用服务器(Dedicated Server)进行构建,并只让一种方式启动服务器:ServerManager 的“无外设模式下启动(Start On Headless)”,或者使用脚本。将 NetworkHudCanvas 的“自动启动类型(Auto Start Type)”设置为“已禁用(Disabled)”,以免启动第二个服务器。

Fish-Networking 在 Edgegap 上使用哪个端口?

无论您的传输层监听什么端口。Tugboat 和 Bayou 默认使用 7770。在您的 Edgegap 应用版本上设置相同的端口,命名为 gameport:Tugboat 使用 UDP,Bayou 使用带有 TLS 升级的 WS。玩家将连接到 Edgegap 为每个部署分配的外部端口。

托管 FishNet 游戏需要 Edgegap 插件吗?

不。该插件是从 Unity Editor 进行构建、容器化和部署的最快方式。连接到 Edgegap MCP 服务器的编码代理,或者您自己的 Docker 构建也同样可行。

我可以在 Edgegap 上托管 FishNet WebGL 游戏吗?

是的。使用 Bayou 传输,将应用版本端口设置为 WS 并开启 TLS Upgrade,让客户端通过 Use WSS 连接到部署的主机名。Edgegap 会处理证书。这是在 Edgegap 上端到端验证过的 FishNet 路径。

托管一个 Fish-Networking 游戏服务器需要多少费用?

测试是免费的,无需信用卡。之后,Edge Cloud 仅在服务器运行期间按每 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 行

解锁

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