本指南向您展示如何为已在 Edgegap 专用游戏服务器上运行的 Unreal Engine 多人游戏添加匹配功能:玩家选择寻找比赛(Find Match),与附近的玩家分组,并连接到 Edgegap 在他们附近启动的服务器。当所有人离开后,服务器会自动停止。
一旦您的游戏服务器容器化,Edgegap 只需通过一个简单的 API 调用即可将其按需部署到全球 615 多个边缘云节点,并且完全按使用量计费:无需租用、配置整台服务器,也无需在比赛间隔期间保持其运行。对于预留容量的持久性服务器,Edgegap 提供了专用机群(Private Fleets)。Edgegap 的對局配對功能构建于此基础之上,并且是可选的。
您可以在 Edgegap 控制面板中使用 JSON 文件配置匹配器,无需编写后端代码。在您的游戏中,两个现成的 C++ 文件负责测量延迟(Ping)、创建匹配票证、等待服务器并连接,蓝图可以直接调用它们。它们使用 Unreal 自带的 ClientTravel 进行连接,因此适用于任何使用 Unreal 标准复制和专用服务器的游戏,无需更改您的游戏模式或玩家控制器。
本指南包含以下内容:
为您的游戏准备一个正常工作的 Edgegap 应用版本
将您的编码智能体连接到 Edgegap(可选)
将匹配文件添加到您的项目中
配置客户端
创建您的匹配器
选择您的匹配规则
使用两名玩家进行测试
您可以通过两种方式进行操作,也可以结合使用:
使用编码智能体。将 Claude Code、Cursor 或其他智能体连接到 Edgegap MCP 服务器及其智能体技能。智能体负责添加文件、编辑配置、运行构建并检查匹配器。您只需负责控制面板上的点击操作和测试游戏。
手动操作。以下每个步骤也可以在没有智能体的情况下进行。
本指南遵循 Edgegap 的對局配對文档。请查看该文档以获取最新的配置选项和 API 变更。
在本指南结束时,玩家只需点击寻找对局,Edgegap 的配对系统便会根据玩家的延迟将他们与其他玩家进行分组,在离所有人最近的位置启动专用服务器,并且每个客户端都会自动连接到该服务器。当比赛结束且所有人离开后,服务器会自动停止,因此您只需为使用时间付费。
配对系统本身是免代码的:您可以在 Edgegap 控制面板中使用 JSON 文件对其进行配置。在游戏端,Unreal Engine 并没有像 Unity 那样拥有官方的 Edgegap 對局配對 SDK。相反,Edgegap 提供了两个开箱即用的 C++ 文件,您可以直接放入项目中。它们能为简单比赛完成 Unity SDK 所做的一切:测量 ping、创建票证、等待服务器并进行连接。您无需编写任何网络代码,并且蓝图菜单可以直接调用它们。
因为客户端是通过 Unreal 内置的 ClientTravel 进行连接的,所以这适用于任何使用 Unreal 标准复制和专用服务器的游戏,无需更改您的游戏模式或玩家控制器。
前置条件
一个 Edgegap 账号。本指南使用免费层(Free Tier)即可。
一个带有 C++ 模块的 Unreal Engine 5 项目(已在 UE 5.5 上验证;5.3+ 版本操作相同)。纯蓝图项目?先通过工具 → 新建 C++ 类添加一个。
您的游戏的 Linux 专用服务器版本,已容器化并作为应用版本发布在 Edgegap 上,游戏端口(
7777,UDP)命名为gameport。已验证连接:您已从控制面板部署过该版本一次,并已在控制台(
~)中使用open {IP}:{port}从客户端成功加入。
不要在您尚未成功连接过的服务器上添加配对功能。如果之后出现问题,您就能确定是对局配对层的问题,而不是服务器本身的问题。
1. 开始之前
一个免费的 Edgegap 账户。请验证您的电子邮箱。测试无需信用卡。
一个包含 C++ 模块的 Unreal Engine 5 项目(已在 UE 5.5 上验证;5.3 或更新版本同样适用)。纯蓝图项目?请先通过工具 → 新建 C++ 类 → 无添加一个。
游戏服务器的可用 Edgegap 应用版本:一个容器化的 Linux 专属服务器,端口为 7777,UDP,命名为
gameport。對局配對会为每场比赛部署所请求的版本,因此需要一个功能完备的容器化游戏服务器来实现端到端运行。如果您目前还没有,请参考我们的指南:Unreal Engine。经过测试的连接:您已经从仪表板部署过一次该版本,并在控制台中使用
open <IP>:<port>从客户端成功加入。请勿在尚未成功加入的服务器上添加撮合机制:这样如果之后出现问题,您就能确定问题出在撮合层。对于代理路径:从 仪表板 → 用户设置 → 令牌 获取的 Edgegap API 令牌。该令牌适用于整个组织,因此请将其视为密码:切勿将其放入您的项目、游戏客户端或聊天中。
2. 将您的代码代理连接到 Edgegap
如果您完全手动操作,请跳过此步骤。
Edgegap MCP 服务器允许您的智能体在您的账户上创建应用和版本、部署服务器、读取日志并生成撮合系统配置。edgegap-unreal 智能体技能为其提供了撮合和服务器关闭文件、相关配置以及已知陷阱。
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 应用。”
您的应用及其版本应该会出现在列表中。
3. 将匹配文件添加到您的项目中
Edgegap 在其开源智能体技能代码库中发布了两个即插即用文件:
EdgegapMatchmakerSubsystem(游戏客户端):测量与 Edgegap 信标的延迟(ping),创建匹配票证,等待服务器,然后建立连接。它包含一个基础的寻找比赛/取消覆盖层。EdgegapServerSubsystem(专属服务器):当匹配系统启动服务器后,一旦比赛中没有玩家,它就会停止部署。
使用您的智能体时,请先进行审计(只读):
“查看我的 Unreal 项目,并告诉我玩家当前是如何连接的:C++ 模块名称、是否存在 Server 目标、服务器默认地图,以及是否有任何内容使用了 open、ClientTravel、会话或 OnlineSubsystem。不要修改任何文件。”
然后:
“使用 edgegap-unreal 技能将 Edgegap 匹配添加到该项目中。放入 matchmaker 和 server 子系统,在 DefaultGame.ini 中添加配置部分并禁用匹配,同时确认编辑器目标仍能编译。创建完成后,我会把 matchmaker 的 URL 和令牌提供给你。”
手动操作:
将
assets/unreal/Source/中的四个文件(每个包含.h和.cpp)复制到Source/<YourModule>/中。在
Source/<YourModule>/<YourModule>.Build.cs中,将"HTTP", "Json", "Sockets", "Slate", "SlateCore"添加到PublicDependencyModuleNames。重新生成项目文件并构建编辑器目标。
这两个子系统默认均处于关闭状态:在第 5 步中开启匹配之前,添加这些文件不会产生任何影响。它们负责处理信标 ping、票证、重试、玩家在搜索过程中退出时取消票证、选择正确的端口、ClientTravel 调用以及服务器关闭。初次测试时您无需编写任何代码。
更倾向于使用蓝图?Fab 上由 Betide Studios 开发的 Edgegap Integration Kit 支持 Edgegap 匹配,并提供了现成的蓝图示例。
4. 配置客户端
所有设置均位于 Config/DefaultGame.ini 中以您的模块命名的节下:[/Script/<YourModule>.EdgegapMatchmakerSubsystem]。添加以下行:
bEnabled=False:在步骤 5 之前保持关闭状态。MatchmakerUrl="YOUR_MATCHMAKER_URL"和AuthToken="YOUR_MATCHMAKER_AUTH_TOKEN":来自步骤 5 中的撮合器页面。请将 URL 保留在引号内,否则 Unreal 会在//处将其截断,导致请求失败并提示“Couldn't resolve host name”。Profile=simple-example:撮合器配置中的配置文件名称。PortName=gameport:应用程序版本上的端口名称。bSendBeaconLatencies=True:仅当配置文件包含延迟规则时使用(简单示例包含此规则)。撮合器会拒绝包含意外值的票据,因此请确保此项与您的配置保持同步。bShowDefaultUI=True:在菜单地图上显示基本的“寻找比赛”浮层。一旦您自己的菜单调用了“寻找比赛”,请将其设置为False。
此外,还需添加一个空的 [/Script/<YourModule>.EdgegapServerSubsystem] 节。如果 5 分钟内没有人加入,或者在最后一名玩家离开 15 秒后,服务器将自行停止(NoPlayerTimeoutSeconds、EmptyServerGraceSeconds)。这仅适用于撮合器启动的服务器,因此您的手动测试部署不受影响。
Auth Token 可以安全地随游戏客户端一同发布:它只能创建和读取票据,无法访问您的 Edgegap 账户。在公开仓库中,请在 DefaultGame.ini 中保留占位符,并将真实值放入 Config/UserGame.ini 中,后者会覆盖前者、被 Git 忽略,且仍会被打包到构建版本中。
5. 创建您的撮合器
在仪表板中,打开 Matchmaker,选择创建 Matchmaker,为其命名,然后选择 Simple Example 模板(它包含的内容)。
将
application.name和application.version设置为与仪表板中显示的应用程序和版本完全一致的名称及版本。如果版本不存在,配置将被拒绝。选择创建并启动,然后等待其就绪。新 matchmaker 的地址可能需要长达 5 分钟的时间才能响应。
将 API URL 和 Auth Token 复制到
DefaultGame.ini中,并设置bEnabled=True。
在启动游戏前检查 URL 和令牌:curl -H "Authorization: <auth token>" <api url>/locations/beacons。如果返回信标的 JSON 列表,则表示它们正常工作。
与您的代理配合使用: “这是我的 matchmaker API URL 和 Auth Token。请检查它们是否有响应,将它们填入 Edgegap matchmaker 设置中,并开启匹配功能。”
6. 选择您的匹配规则
首先使用简单示例运行第 7 步测试,然后根据您的游戏定制规则。简单示例包含两项规则:
比赛规模:恰好 2 名玩家组成一支队伍,因此撮合程序会等待 2 张票据才启动服务器。
延迟:仅当玩家到同一个 Edgegap 位置的延迟差在 100 毫秒以内时才会分组,且忽略高于 200 毫秒的位置。
单人测试?添加扩展规则,以便单个玩家在 10 秒后即可获得服务器:"expansions": { "10": { "match_size": { "min_team_size": 1 } } }。停止撮合程序,编辑配置,然后重新启动。在正式发布前请将其移除。
然后添加队伍规模、技术或段位、游戏模式、地图以及随着玩家等待时间增加而放宽规则的扩展。类型示例(竞技、合作、社交、候补补位)请参阅撮合文档。除比赛规模外,每条规则都需要在每位玩家的票据中包含对应的值:添加规则时请告知您的代理,它也会同步更新客户端。
撮合程序部署会以 JSON 字符串形式接收 MM_MATCH_ID、MM_MATCH_PROFILE、MM_TICKET_IDS、MM_TEAMS、MM_GROUPS 以及针对每位玩家的 MM_TICKET_<id>。使用 FPlatformMisc::GetEnvironmentVariable 读取它们以分配队伍或检查加入的玩家。
发布新的服务器版本时,请更新 application.version(停止、编辑、启动),否则比赛将继续部署旧版本。
7. 双人测试
请确保没有测试部署仍在运行:免费层每次仅运行一个部署,遗留的部署会阻塞匹配。
并排启动两个客户端:
UnrealEditor.exe "<path>\<Project>.uproject" -game -windowed -ResX=960 -ResY=540 -WinX=0 -log,第二个客户端使用-WinX=970。在两个客户端中均选择Find Match。状态会从测量延迟变为搜索中、找到匹配,然后是正在连接。几秒钟内,两个客户端都会加载到同一个服务器中,控制面板会显示带有两个票据 ID 标记的部署。
关闭两个客户端。大约一分钟后,部署会自动停止。
您也可以从控制台使用 Edgegap.FindMatch 和 Edgegap.CancelMatch 排队,或者在命令行中添加 -FindMatch。如果票据分配到了服务器但客户端无法连接,问题出在服务器端,而不是匹配器:请手动部署该版本并再次测试 open <IP>:<port>。在免费层上,匹配器在每次启动 3 小时后停止:请从控制面板重新启动它。
构建您自己的菜单。FindMatch、CancelMatch、GetState 和 GetStatusText 均可在 Edgegap Matchmaker Subsystem (Get Game Instance Subsystem) 上通过蓝图调用,且 OnStatusChanged 会在您的 UMG 控件每次更新时触发。然后设置 bShowDefaultUI=False。
文件的工作原理。客户端获取 Edgegap 的信标并计算与每个信标的 TCP 握手时间(三局两胜,并行,1 秒超时),将以城市为键的 ping 包含在票据中发送,每 2 秒轮询一次直至分配完成,然后跳转至服务器的 IP 以及 PortName 中指定的端口,等同于 open <IP>:<port>。取消或退出会删除票据。在服务器端,子系统会识别 matchmaker 的 MM_MATCH_ID,监控登录情况,并在对局清空后调用 Edgegap 注入的 ARBITRIUM_DELETE_URL。身份验证令牌直接放入 Authorization 标头中,无需“Bearer”前缀。
准备上线?让您的代理运行 edgegap-launch 技能的检查清单,并在发布前选择生产环境 matchmaker。正在使用 Epic Online Services?请参阅 Epic Online Services。
遇到困难?让您的代理加载 edgegap-troubleshoot,或在 Edgegap Discord 上向我们的团队和其他工作室咨询。
常见问题
关于将 Edgegap 匹配系统添加到 Unreal Engine 多人游戏的常见问题。
是否有适用于 Unreal Engine 的 Edgegap 匹配 SDK?
Edgegap 提供了两个开源的 C++ 文件,您可以直接放入项目中以替代插件:一个用于游戏客户端,另一个用于专用服务器。对于以蓝图为主的团队,Fab 上的 Betide Studios 的 Edgegap Integration Kit 也支持 Edgegap 匹配系统。
我可以将 Edgegap 匹配系统添加到纯蓝图(Blueprint-only)的 Unreal 项目中吗?
是的。添加一个空的 C++ 类以创建一个 C++ 模块,放入相关文件,然后从蓝图中调用 Find Match。或者使用 Betide Studios 的 Edgegap Integration Kit,它自带了一个蓝图示例。
我需要更改游戏模式才能使用 Edgegap 匹配系统吗?
不。客户端使用 Unreal 内置的 ClientTravel 进行连接,这与输入 open 加上服务器地址相同,因此任何使用标准复制和专用服务器的游戏都可以直接运行。
撮合系统(Matchmaker)的 Auth Token 在 Unreal 游戏客户端中安全吗?
是的。它只能创建和读取撮合票据(matchmaking tickets),无法访问您的 Edgegap 账户。在公共代码仓库中,请将真实值保存在 Config/UserGame.ini 中,Git 会忽略该文件,而 Unreal 仍会将其打包。
Edgegap 匹配服务的费用是多少?
测试是免费的,在共享撮合系统上进行,该系统每次启动后 3 小时停止。对于已上线的游戏,您可以选择生产撮合系统,并且游戏服务器仅在运行时按每 vCPU 每分钟计费。

客户
了解更多已接入 Edgegap 的客户案例
提供 31 个从其他平台迁移至 Edgegap 的工作室案例研究。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

台球大师巡回赛Max
RETA Games
Case Study

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

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.
Case Study

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









