了解Edgegap的工作原理

了解Edgegap的工作原理

/

/

Multiplayer Servers Sample

PlayFab

Multiplayer Servers Sample

部署至 Edgegap

已发布

已发布

已发布

最近一次准确性审核

最近一次准确性审核

最近一次准确性审核

PlayFab 的多人游戏服务器示例:在 Unity 中通过 Edgegap 专用服务器运行

PlayFab 的多人游戏服务器示例:在 Unity 中通过 Edgegap 专用服务器运行

这是 PlayFab 自己的针对 PlayFab Multiplayer Servers 的 Unity 示例,源自 Microsoft 的 MpsSamples,改为在 Edgegap 上运行。Edgegap 的复刻版本保留了相同的 Unity 服务器和客户端,移除了 PlayFab Game Server SDK (GSDK),并使用 Edgegap Unity 插件构建和上传服务器。

无需任何预置资源。没有构建区域、备用池或需要调整大小的虚拟机:每个专用服务器都会按需在其玩家附近启动,并在玩家离开时自行停止。

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

支持平台:Windows 桌面客户端(已测试),Linux 专用服务器。原始示例由 Microsoft PlayFab 提供,遵循 Apache 2.0 许可证。

工作原理

  1. 您构建 Unity 服务器并使用 Edgegap Unity 插件将其作为 Edgegap 应用程序版本上传。

  2. 一个小型控制台应用程序 EdgegapAllocatorSample 向 Edgegap 请求一个靠近玩家 IP 的服务器。它充当 PlayFab 的 RequestMultiplayerServer 调用的角色,并在服务器准备就绪后打印其地址。

  3. 服务器启动后立即监听 TCP 端口 7777。客户端使用 -server host:port 连接到该地址。

  4. 当玩家离开时,服务器会停止自己的部署,从而停止计费。

在 PlayFab Multiplayer Servers 上与在 Edgegap 上的对比:

在 PlayFab Multiplayer Servers (GSDK) 上

在 Edgegap 上

AgentListener.cs:GSDK Start,端口取自 GetGameServerConnectionInfo,ReadyForPlayers,在 OnServerActive 上监听

EdgegapServer.cs:启动时监听固定端口 7777

UpdateConnectedPlayers

不需要。服务器会记录其玩家数量

OnShutDownCallback

Edgegap 发送 SIGTERM;Unity 退出时玩家会收到相同的 ShutdownMessage

构建版本、虚拟机大小、每台虚拟机的服务器数、备用服务器

应用版本:镜像,每个服务器 0.5 vCPU / 1 GB,端口 gameport TCP 7777

RequestMultiplayerServer

POST /v2/deployments (EdgegapAllocatorSample)

服务器一直运行,直到 PlayFab 将其关闭

如果无人加入,服务器会在启动 120 秒后自行停止部署;或者在最后一名玩家离开 30 秒后停止

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

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

分步指南

运行示例

1. 开始之前

  • 一个免费的 Edgegap 账户以及从控制面板 → 用户设置 → 令牌获取的 API 令牌。该令牌在整个组织范围内有效:请将其保存在您的本地机器或后端中,切勿放在游戏客户端内。

  • Unity 2021.3.45f2,需配备 Linux Build Support 和 Linux Dedicated Server Build Support。两个项目均使用此版本。

  • Docker Desktop,用于插件的容器构建。

  • .NET SDK 8 或更高版本,用于 EdgegapAllocatorSample。

  • 克隆该 fork 分支。示例位于 UnityMirror/(UnityServer 和 UnityClient)以及 EdgegapAllocatorSample/ 中。

Git:Unity 需要在 PATH 环境变量中配置 Git 客户端(2.14.0 或更高版本),以从 Git URL 安装程序包(例如 Edgegap 插件)。macOS 通常已经自带(Xcode Command Line Tools);在 Windows 上,请安装 Git。

2. 构建并上传服务器

在 Unity 中打开 UnityMirror/UnityServer。Edgegap Unity 插件已包含在其包列表中,固定版本为 3.2.1。打开Tools → Edgegap Server Hosting:

  1. Sign in with Edgegap,然后点击 Build server。

  2. Containerize with Docker:镜像名称为 mps-unity-mirror,镜像标签留空(插件将使用当前 UTC 时间)。

  3. 可选的本地检查:运行参数为 -p 7777:7777/tcp,然后点击 Deploy local container。

  4. Upload to Edgegap:应用程序为 mps-unity-mirror,然后点击 Upload image and Create app version。

在版本表单中:

  • 一个端口:名称为 gameport,7777,TCP(示例使用的是 Mirror 的 Telepathy 传输协议)。

  • 0.5 vCPU 和 1 GB。

  • 最长持续时间为 60 分钟。服务器也会自动停止。

  • 如果被要求提供,填写控制台 Container Registry 页面中的注册表用户名和令牌。

若要改为从命令行构建(用于 CI、脚本化测试),请在编辑器中关闭该项目后运行:

"<Unity>" -batchmode -projectPath UnityMirror/UnityServer -executeMethod EdgegapPluginBuild.BuildServer -logFile build-server.log

3. 启动服务器

EdgegapAllocatorSample 是 PlayFab MpsAllocatorSample 的 Edgegap 对应项:一个使用 HttpClient 调用 Edgegap API 的 .NET 控制台应用,无需 SDK。为其提供步骤 2 中的令牌、应用程序和版本名称:

cd EdgegapAllocatorSample

export EDGEGAP_API_TOKEN="token xxxxxxxx" EDGEGAP_APP=mps-unity-mirror EDGEGAP_VERSION=<version name>

dotnet run -- deploy <your public IP>

服务器就绪后,它会输出 -server <host>:<port>。您还可以将玩家作为 latitude,longitude 传递,支持一次传入多个:Edgegap 会为整个群组选择最佳可用位置。

不带参数运行 dotnet run 可查看菜单:列出版本、列出部署、获取单个部署或停止某个部署。

PlayFab 的 MpsAllocatorSample

EdgegapAllocatorSample

Edgegap API

RequestMultiplayerServer

1:部署服务器,等待其就绪,输出 host:port

POST /v2/deployments,然后执行 GET /v1/status/{request_id}

ListBuildSummaries

2:列出应用程序的版本

GET /v1/app/{app}/versions

ListMultiplayerServers

3:列出部署

GET /v1/deployments

GetMultiplayerServerDetails

4:获取单个部署

GET /v1/status/{request_id}

ShutdownMultiplayerServer

5:停止部署

DELETE /v1/stop/{request_id}

它启动的每个部署都会被打上 edgegap-allocator-sample 标签。

4. 连接两个客户端

为 Windows 构建 UnityClient。它没有服务器构建版本,因此 Unity 的命令行可以直接使用:

"<Unity>" -batchmode -quit -projectPath UnityMirror/UnityClient -buildTarget Win64 -buildWindows64Player Builds/Client/win64/Client.exe

然后使用步骤 3 中的地址启动两个客户端:

UnityMirror/UnityClient/Builds/Client/win64/Client.exe -server <host>:<port>

两者都会加入同一个服务器。如果不带 -server 参数,客户端将使用在检视面板 (Inspector) 中 NetworkManager 上设置的地址和端口。退出客户端:服务器将在 30 秒后停止部署,并从 Edgegap 控制面板中消失。

5. 将您自己的游戏从 PlayFab Multiplayer Servers 迁出

该分支是脱离 PlayFab Multiplayer Servers 的工作参考:您的编码智能体可以直接复制其经过测试的文件,而无需从头编写。通过四个改动即可将 Unity 服务器从 GSDK 迁移出来:

  1. 移除 GSDK。删除 Assets/PlayFabSdk 并将 AgentListener.cs 替换为一个在启动时监听固定端口的小型服务器脚本(该分支的 EdgegapServer.cs 保留了相同的 .meta,因此场景无需编辑)。

  2. 自行停止服务器。当无人加入或所有人都离开时,使用 ARBITRIUM_DELETE_TOKEN 调用 Edgegap 为每次部署提供的 ARBITRIUM_DELETE_URL。在一场比赛结束时调用 SelfStop()。

  3. 通过 Edgegap API 启动服务器。将 RequestMultiplayerServer 替换为从后端发送的 POST /v2/deployments,附带玩家的 IP 或坐标。

  4. 使用插件进行容器化。使用 Edgegap Unity 插件进行构建、容器化和上传,然后使用您的游戏端口创建应用版本。

使用 Mirror 时,通过 NetworkManager.StartServer() 而非 NetworkServer.Listen 启动服务器,否则客户端会因未通过身份验证而被断开连接。

与您的智能体配合使用:

“加载 edgegap skill,然后加载 edgegap-unity 以及适用于我的网络代码的 skill。以 github.com/edgegap/backend-game-sample-unity-mirror-playfab-mps (UnityMirror) 为参考,从我的 Unity 服务器中移除 PlayFab GSDK,使其在启动时监听固定端口,并在空闲时停止其自身的 Edgegap 部署,然后使用 Edgegap Unity 插件将其容器化。”

有关手动的完整迁移流程,请参阅 PlayFab 迁移指南。

6. 添加匹配功能

该示例尚无匹配器:您可以使用 EdgegapAllocatorSample 或控制面板启动每个服务器。若要将玩家分组到这些服务器中,请选择一种方式:

  • 保留 PlayFab 匹配。关闭队列上的服务器分配,让 Azure Function 为每场对局启动一个 Edgegap 服务器。PlayFab 集成指南对此进行了详细介绍,而 SpaceEdge 示例则提供了端到端的运行演示。

  • 使用 Edgegap 的匹配器。一个托管的匹配器,可为每场对局启动服务器,无需编写后端代码。请参阅匹配器文档。

已知限制

  • 示例中没有匹配器(Matchmaker)。服务器通过您机器上的 EdgegapAllocatorSample 启动,并使用您的 API 令牌。在生产环境中,请从后端或匹配器启动它们,绝不要从游戏客户端启动。

  • 插件 3.2.1 会记录自停止令牌。其 Dockerfile 首先运行 env,因此部署日志会显示注入的变量,包括 ARBITRIUM_DELETE_TOKEN。这已在插件的下一个版本中修复(edgegap/buildtool-unity-plugin#62):发布后请更新固定版本。

  • 服务器不会检查连接者身份。在生产环境中,请将预期的玩家传递给服务器并拒绝其他玩家。

  • 仅测试了 Windows 客户端。该分支中的其他 PlayFab 示例(Unreal、遥测、封装 GSDK)与 Microsoft 仓库保持一致,未作更改。

测试了什么

于 2026 年 10 月 29 日在 Edgegap 上进行了端到端测试,使用 Unity 2021.3.45f2 和 Edgegap Unity 插件 3.2.1:

  • EdgegapAllocatorSample deploy 在几秒钟内在多伦多启动了服务器。

  • 两个 Windows 客户端通过 TCP 连接(2 player(s) connected)。

  • 在他们退出后,服务器停止了自己的部署。

  • 同样在本地 Docker 中运行:结果相同,并且在服务器退出之前,docker stop 向已连接的客户端发送了关闭消息。

常见问题

关于在 Edgegap 上运行 PlayFab 的多人游戏服务器示例的疑问。

我可以在 Edgegap 上运行 PlayFab 的 Multiplayer Servers 示例吗?

是的。Edgegap 对微软 MpsSamples 的分叉版本在没有 GSDK 的情况下,在 Edgegap 专属服务器上运行了 Unity Mirror 示例。该方案已于 2026 年 10 月完成了端到端测试,在一台服务器上运行了两个客户端。

在 Edgegap 上我需要使用 PlayFab GSDK 吗?

不。服务器在启动时会监听一个固定端口,并在玩家离开时自行停止部署。没有需要上报的代理,没有心跳,也没有需要设置的就绪状态。

在 Edgegap 上,什么替代了 RequestMultiplayerServer?

向 Edgegap API 发起 POST /v2/deployments 调用,并附带玩家的 IP 或坐标。Edgegap 会在最适合他们的可用位置启动服务器并返回其地址。该示例的 EdgegapAllocatorSample 在每个 MpsAllocatorSample 命令旁边展示了此调用。

我需要在 Edgegap 上准备备用服务器吗?

不。每台服务器都是根据请求在其玩家附近启动的,因此无需调整备用池的大小。如果您的游戏需要预热服务器,专属机队(Private Fleets)可以保持容量持续运行。

客户

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

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

他们选择 Edgegap 的关键原因

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

费用

定价

定价

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

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

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

边缘云

按需

$0.00115

/ vCPU

/ 分钟

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

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

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

只需添加信用卡。

边缘云

按需

$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全天候可用,您的工作室专属。

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

预留容量

$0.0261

/ vCPU

/ 小时

按月计费,始终开启

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

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

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

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

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

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

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

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

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

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

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

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

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

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

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