这是 PlayFab 自己的针对 PlayFab Multiplayer Servers 的 Unity 示例,源自 Microsoft 的 MpsSamples,改为在 Edgegap 上运行。Edgegap 的复刻版本保留了相同的 Unity 服务器和客户端,移除了 PlayFab Game Server SDK (GSDK),并使用 Edgegap Unity 插件构建和上传服务器。
无需任何预置资源。没有构建区域、备用池或需要调整大小的虚拟机:每个专用服务器都会按需在其玩家附近启动,并在玩家离开时自行停止。
Edgegap 的网络覆盖 615 个以上的边缘云位置(了解更多)。每个服务器都会部署到最适合其玩家的可用位置,并且仅在比赛进行期间计费。
正在迁离 PlayFab Multiplayer Servers?请阅读 PlayFab 迁移指南
保留 PlayFab 匹配?请遵循 PlayFab 集成指南
支持平台:Windows 桌面客户端(已测试),Linux 专用服务器。原始示例由 Microsoft PlayFab 提供,遵循 Apache 2.0 许可证。
工作原理
您构建 Unity 服务器并使用 Edgegap Unity 插件将其作为 Edgegap 应用程序版本上传。
一个小型控制台应用程序
EdgegapAllocatorSample向 Edgegap 请求一个靠近玩家 IP 的服务器。它充当 PlayFab 的RequestMultiplayerServer调用的角色,并在服务器准备就绪后打印其地址。服务器启动后立即监听 TCP 端口 7777。客户端使用
-server host:port连接到该地址。当玩家离开时,服务器会停止自己的部署,从而停止计费。
在 PlayFab Multiplayer Servers 上与在 Edgegap 上的对比:
在 PlayFab Multiplayer Servers (GSDK) 上 | 在 Edgegap 上 |
|---|---|
|
|
| 不需要。服务器会记录其玩家数量 |
| Edgegap 发送 SIGTERM;Unity 退出时玩家会收到相同的 |
构建版本、虚拟机大小、每台虚拟机的服务器数、备用服务器 | 应用版本:镜像,每个服务器 0.5 vCPU / 1 GB,端口 |
|
|
服务器一直运行,直到 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:
Sign in with Edgegap,然后点击 Build server。
Containerize with Docker:镜像名称为
mps-unity-mirror,镜像标签留空(插件将使用当前 UTC 时间)。可选的本地检查:运行参数为
-p 7777:7777/tcp,然后点击 Deploy local container。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 |
|---|---|---|
| 1:部署服务器,等待其就绪,输出 |
|
| 2:列出应用程序的版本 |
|
| 3:列出部署 |
|
| 4:获取单个部署 |
|
| 5:停止部署 |
|
它启动的每个部署都会被打上 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 迁移出来:
移除 GSDK。删除
Assets/PlayFabSdk并将AgentListener.cs替换为一个在启动时监听固定端口的小型服务器脚本(该分支的EdgegapServer.cs保留了相同的.meta,因此场景无需编辑)。自行停止服务器。当无人加入或所有人都离开时,使用
ARBITRIUM_DELETE_TOKEN调用 Edgegap 为每次部署提供的ARBITRIUM_DELETE_URL。在一场比赛结束时调用SelfStop()。通过 Edgegap API 启动服务器。将
RequestMultiplayerServer替换为从后端发送的POST /v2/deployments,附带玩家的 IP 或坐标。使用插件进行容器化。使用 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 的工作室案例研究。

《以太之战 2》完美的全球发布
Aether Studios
了解Aether Studios是如何快速添加Edgegap并向他们的社区交付完美的启动和后启动服务的。
案例研究

克服因虚拟现实在竞技Multiplay中使用WiFi而引入的延迟
Halfbrick Studios
Discover how Halfbrick successfully launched & maintains a multiplayer-focused Early Access on META Quest's VR platform.
案例研究

MENA的社交应用添加了在线游戏
WOLF
了解这款在中东和北非地区广受欢迎的社交应用如何轻松地将 matchmaking 和多人游戏编排添加到 WOLF Qanawat。
案例研究

混合编排让开球策略随时应对任何流量做好准备
Birch Games
混合编排如何帮助 Birch Games 应对流量——将免流出费用的 Fleets 与无区域限制云相结合。
案例研究

7天血月
The Fun Pimps & iLLOGIKA
了解 Illogika 如何大幅降低服务器成本,并确保提供《七日杀 (7 Days to Die)》玩家所期望的在线体验。
案例研究

真实的在线战争需要终极的协调
Highwire Games
了解Highwire对性能的需求如何需要只有Edgegap才能提供的编排。
案例研究

22,000 条评价、4.8 颗星以及自动扩展的基础架构
Sinn Studios
一个由 Slack 提供支持的简单集成,如何让 Sinn Studio 的热门 VR 游戏快速上线并保持稳定运行。
案例研究

动态服务器编排
Under NDA - AAA Studio
了解世界上最大的AAA工作室之一如何通过边缘计算改善其对等多人游戏体验。
案例研究

对于 AAA 格斗游戏的近零延迟
AAA Studio - Under NDA
一个未宣布的项目如何实现了最低延迟,并改善了其1v1游戏中的公平性。
案例研究

Play Gods with Multiplayer Physics
Squido Studio
Learn how Squido uses Edgegap's highligh optimized game servers to deliver mind-bending & chaotic VR gameplay.
案例研究

全面托管的解决方案为独立游戏节省时间 多人VR恐怖游戏
Dirty Pearl Studios
了解Dirty Pearl Studios如何通过Edgegap的轻松集成和自动编排,以及其Nakama集成,节省了开发时间。
案例研究

即时全球服务器部署以促进协作式XR医学教育
AlensiaXR
AlensiaXR如何利用Edgegap为全球医学生提供低延迟、始终可用的共享解剖课程。
案例研究

守光人:具有专用服务器的 VR 社交合作游戏
Spectral Games
Spectral Games 如何在无需任何服务器经验的情况下,利用 Edgegap Matchmaking 和 Server Browser 为其 VR 社交大厅启动专用服务器。
案例研究

全球范围内快速可靠的部署,适用于PvPvE挑战者Gravebound
Crater Studios
Edgegap 的调度和配对如何帮助 Crater Studios 使他们能够将重心从基础设施转移到游戏玩法上。
案例研究

快速扩展网络元宇宙
Hiber
了解Hiber如何通过Edgegap消除服务器容量规划中的猜测。
案例研究

高硬件要求和自定义游戏服务器池
Alderon Games
了解Alderon Games如何瞬间利用全球多个供应商的自定义游戏服务器池来支持其热门MMO。
案例研究

独立开发者的简单集成
WhaleFood Games
阅读关于WhaleFood Games如何使用Edgegap解决其网络代码问题的文章。
案例研究

推动东南亚首款电子竞技游戏的尖端技术。
Anantarupa Studios
了解Edgegap如何通过一个无缝解决方案简化复杂基础设施和尖端技术,从而改变东南亚的游戏格局。
案例研究

一次打击。全球抵达。
Triple Hill Interactive
Triple Hill Interactive如何利用Edgegap的编排来提供低延迟,并提高在每毫秒都至关重要的游戏类型中的公平性。
案例研究

快节奏团队大逃杀...带着枪的动物毛绒玩具!
SANDYFLOOR
了解一家韩国独立工作室是如何将其多人游戏发布到全球的。
案例研究

移动端赛马游戏凭借即时、高效能的服务器走向全球
Mirai Labs
看 Mirai Labs 如何通过即时服务器部署和细分 vCPU 来运行 Pegaxy Blaze 的全球多人竞速游戏,从而将单个玩家的成本保持在极低水平。
案例研究

服务器管理与分发
Matrioshka Games
阅读关于Matrioshka Games如何在资源有限的情况下发布早期访问的战斗 Royale。
案例研究

听我的信号,释放地狱!
TyGames
探索独立工作室TyGames如何让玩家沉浸在第三人称角斗士战斗的多人游戏中。
案例研究

瞬时全球编排
Soliton Interactive
探索Soliton Interactive如何做到了不可能……首次推出可多人玩的版本!
案例研究

竞技游戏具有服务器端物理引擎,确保理想的低于50毫秒的延迟
NS7
了解为什么仅有Edgegap能够使独立工作室通过服务器端物理和权限实现其AAA质量的免费游戏体育玩法愿景。
案例研究

iGaming的区域部署
X1 Contra 1
X1 Contra 1 通过经济高效的托管和区域部署,为其巴西玩家提供实时 PvP 休闲游戏,确保数据和法律合规。
案例研究

仅在玩家游玩时付费:经济实惠的多人游戏基础设施
Meltdown Interactive
Edgegap 如何帮助独立开发商 Meltdown Interactive Media 在无需复杂方案的情况下,以高性价比解决扩缩容和匹配问题,从而让他们能够专注于游戏开发。
案例研究

同一个 Edgegap 平台,三种截然不同的网络配置
Warped Games
了解 Warped Games 如何在同一个 Edgegap 部署 API 和同一个容器管线上运行社交中心、实时合作以及回合制合作。
案例研究

台球大师巡回赛Max
RETA Games
案例研究

韩国的Web3 POP提取射击游戏走向全球,即刻启程
NDUS Entertainment
XOCIETY 如何轻松地添加 Edgegap 编排并集成自定义 matchmaking,与 Edgegap Ping Beacons 一起优化延迟。
案例研究

Multiplayer in Every Dimension
Arcadia.tv
Discover how Arcadia.tv uses Edgegap's edge network to deliver an innovative, team and location-based athletic VR sport.
案例研究

F2P 移动格斗游戏利用即时(Just-In-Time)服务器降低基础设施成本
Game Changers Worldwide
Game Changer Worldwide 如何在全球移动端托管 Rumble Rush 的实时 3v3 PvP 游戏。
案例研究
他们选择 Edgegap 的关键原因
了解 Edgegap 自动化游戏服务器编排如何带来无缝的多人游戏体验。









