匹配系统
快速开始 Matchmaking 并探索各种类型的示例场景。
基于对战的游戏中的匹配系统通常旨在:
找到其他玩家 基于诸如区域、延迟、技术水平或游戏参数等条件;
搜索服务器 根据可用容量[或延迟、区域、技术水平、地图、模式]加入;
启动新服务器 如果现有服务器已满或不满足玩家条件。
玩家体验至上,定义我们的核心目标:
高对局填充率和社交功能整合(与好友组队游戏),
快速匹配且控制匹配质量(低延迟、共享偏好),
可靠且可预测的匹配流程并具有全球可用性。
或者,让玩家 从列表中选择一个持久的(始终在线)服务器 带有 服务器浏览器.
观看此视频以开始使用我们的 Matchmaker 服务:
✔️ 准备工作
测试此服务完全免费,无需信用卡。
免费额度允许在我们的共享测试集群上每次重启后最多运行 3 小时。
本教程假设您已:
已从游戏客户端成功连接到您在 Edgegap 上的服务器。
Matchmaking 架构
本指南将重点介绍 Matchmaking API 和 Backfill API.

当涉及匹配时,有四(4)个重要的数据流:
Matchmaking API 由游戏客户端用于与 Matchmaker 通信:
用于组管理、服务器分配和监控,
用于与 的延迟测量, 添加并更新了示例请求/响应,.
部署 API 被 Matchmaker 用于部署、扩展和管理你的专用服务器。
Netcode 传输 用于在游戏客户端和专用服务器之间进行通信。
深入解析 从服务器替换或添加更多玩家。
🍀 简单示例
从一个简单示例开始并测试基本的匹配玩家流程:
1. 在免费层上设置
☑️ 注册你的免费 Edgegap 帐户 并打开 Matchmaker 仪表板页面.
☑️ 点击 创建 Matchmaker 首先,然后输入:
matchmaker 名称 - 供你自己参考,例如
quickstart-dev,上传我们的简单示例 JSON 配置。
🍀 简单示例(最小推荐配置):
确保更改应用程序的 名称 和 版本 以匹配你的 应用与版本.
故障排除和常见问题:
☑️ 如果没有出现验证错误,点击 创建并启动 并等待该过程完成。这将导致一个新的免费集群启动,并运行你的简单示例 matchmaker。
✅ 你现在可以继续下一步。
2. 探索配置
随着我们对 Matchmaker 发布更新,每个新版本使用 语义化版本控制 通过解析格式清楚传达变更的影响 major.minor.patch:
🔥
主版本(major)包括破坏性更改并需要集成审查,🌟
次版本(minor)包括大量向后兼容的改进,🩹
补丁(patch)包含错误修复和小幅改进。
检查票据(Inspect tickets) 以更好地理解和调试开发中可能的匹配流程。我们建议为你的线上 matchmaker 禁用 inspect API。
一些 部署可能会导致错误. 我们尝试通过最多重试部署来解决此问题,次数为 max_deployment_retry_count 次(自动进行,无需客户端确认)。
为确保意外的客户端崩溃或被遗弃的票据不会长时间占用你的 matchmaker 资源,票据将在 ticket_expiration_period 之后被取消,导致其状态变为 CANCELLED 然后在 ticket_removal_period .
之后被永久删除。 ,删除所有票据并导致短暂停机。我们匹配逻辑的核心在于配置于 应用与版本 。每个配置文件都是完全隔离的匹配队列,指向
规则 并具有预定义的所需 CPU 和内存(RAM)资源量。
初始规则集中必须满足的条件以将玩家分组在一起,每个规则由三个属性定义:
你选择的名称,例如 -,匹配大小
规则类型,也称为运算符,例如 -,player_count
最后是运算符属性,例如team_count或.
max_team_size
玩家计数规则
最后是运算符属性,例如这是一个特殊规则,定义需要多少玩家匹配以启动分配:指的是队伍数量,1 支队伍可用于合作或混战模式,min_team_size或指的是每队的最小玩家数量。
指的是每队的最大玩家数量。
我们的简单示例演示了一个有 2 名玩家的合作游戏。 Player Count 规则 是必需的并且只能定义一次
在你的初始配置规则中。
延迟 是一条优化玩家匹配 ping 的特殊规则:
通过移除高延迟(超过阈值)的区域来降低客户端-服务器延迟,
通过将延迟相似(差值之下)的玩家分组来提高匹配公平性。
规则 延迟 是 可选的,且只能在初始配置中定义一次 规则。
✅ 你现在可以继续下一步。
延迟规则(Latencies Rule)
3. 查看实例详情

☑️ 在你的 matchmaker 初始化后,在我们的仪表板中查看其详细信息: 状态
表示服务健康状况,可能为 ONLINE、OFFLINE 或 ERROR。 标识符
可帮助 Edgegap 员工在你需要排查问题时快速找到你的 matchmaker。 启动时间
可用于跟踪最近更新时间。 大小 对应于我们的其中一个.
定价层(Pricing Tiers) API URL
将被游戏客户端和游戏服务器用于与你的 matchmaker 通信。 Swagger URL
是我们提供的一个方便的 openAPI 规范 GUI,用于探索 API 模式。 Auth Token
是游戏客户端和游戏服务器用于身份验证的唯一秘密令牌。
Edgegap 员工永远不会索取你的令牌。如果你怀疑安全泄露,请重新生成令牌。 要测试你新的 matchmaker,.
✅ 你现在可以继续下一步。
查看 ⏩ 滚动更新 要在开发中更新你的 matchmaker 规则,请编辑你的配置并重启它。
用于线上游戏和零停机更新。
以允许 DNS 传播完成。 ☑️ 首先, 打开你的 Swagger URL

☑️ 点击 在 swagger GUI 中检查你的 openAPI 模式: 授权 是我们提供的一个方便的 openAPI 规范 GUI,用于探索 API 模式。🔒,粘贴你的 在 swagger GUI 中检查你的 openAPI 模式:.

,然后点击确认 ☑️ 向下滚动到 票据 API- POST /tickets ,展开并点击.

尝试一下(Try it out)
☑️ 预览你的请求:
注意player_ip设置为null 服务器到服务器 - 这将导致 Matchmaker 使用自动添加到你请求中的 IP 地址(参见以获得替代方案),profile ,删除所有票据并导致短暂停机。,指的是你的attributes包含你的 matchmaker 规则的值,在本例中为延迟(latencies)规则,
规则类型,也称为运算符,例如 -rule
是唯一一个在玩家票据中不需要任何属性的规则。 ☑️ 点击 执行(Execute)
并查看对你的玩家票据请求的响应:id以获得替代方案),是你唯一的匹配票据 ID,请保存以便稍后检查你的票据, ,删除所有票据并导致短暂停机。,确认所选的group_id 是分配给每张票据的唯一,组 ID,单人玩家表示为 1 人的组team_id是在达到TEAM_FOUND注意每个队伍可以包含多个组,但不得超过配置的队伍大小是玩家解析出的公网 IP 地址,无论使用何种识别方法,assignment设置为被设置为以指示票据尚未匹配或分配到服务器,created_at提供有关玩家票据何时创建的信息,可用于游戏 UI,status表示票据的当前状态,所有票据都以.

SEARCHING ☑️ 点击 ☑️ 通过再次点击创建第二张票据
,以便我们的两名玩家匹配并启动服务器。 ☑️ 收起 POST /tickets 并打开GET /tickets/{ticketId} ,展开并点击.
,然后点击 ☑️ 点击.

☑️ 在上一步响应中输入票据 ID 并点击
☑️ 检查玩家票据的更新分配:
状态更改为MATCH_FOUND是玩家解析出的公网 IP 地址,无论使用何种识别方法,player_ip设置为首先,同时保持

是唯一一个在玩家票据中不需要任何属性的规则。 ☑️ 点击 以指示玩家已匹配且正在分配服务器,
☑️ 检查玩家票据的更新分配:
再次检查你的票据,并查看票据的更新分配:HOST_ASSIGNED是玩家解析出的公网 IP 地址,无论使用何种识别方法,并且

☑️ 你的票据已被 DELETE 请求移除,或因达到其移除期而被移除(在票据过期后开始,定义在你的配置中)。重新创建新票据或在配置中增加过期/移除周期以进行测试。:
在我们的仪表板中检查你新的部署

在找到匹配后几秒钟,匹配过程会继续到 如果玩家已被匹配并分配到游戏服务器,他们的票据会被自动删除。在 表示你的 部署现在已就绪并且你的游戏服务器正在初始化.
每个玩家读取他们的 ticket_id 和 assignment 并使用以下方式尝试连接 FQDN (部署 URL) 和 外部端口。此时你的游戏服务器可能仍在初始化,因此 玩家必须多次重试连接,直到超过你通常的服务器初始化时间:
要 从 PIE(编辑器)连接 在开发和测试期间,按下波浪号键 ~ 并输入 open {URL}:{port} 并等待你的编辑器加载地图。
要 从游戏客户端构建连接 (以及在生产线上)尝试
虚幻引擎 ⚡ 集成工具包:
从 Fab 市场 安装 (个人使用免费),
导入简单示例蓝图 并根据您的需求进行自定义。
如果连接失败或出现黑屏,请查阅我们的 故障排除指南.
要 将你的 Unity 编辑器连接 注入的变量(Injected Variables) 游戏客户端 到你的云部署,输入:
部署 URL 指向服务器的 IP,通常在
NetworkManager组件中。外部端口 映射到 服务器的内部监听端口,通常在传输组件中。
如果出现连接超时或其他问题,请查阅我们的 故障排除指南.
玩家应当 在游戏重启之间持久保存他们的分配 ID,以便在游戏客户端崩溃的情况下他们可以检索连接详情并尝试重新连接。
参见 匹配系统 以及我们带有自动重连功能等更多功能的 SDK。
注意每个部署都带有所有票据 ID 和配置文件标签以增强可追溯性。
☑️ 尝试从你的游戏客户端连接到分配的服务器。 如果你遇到高延迟,可能是你的 netcode 集成被配置为模拟网络延迟。 测试时禁用 VPN 以获得更真实的条件并获得.
低延迟部署 ☑️ 一旦你确认能够无问题连接到你的部署并完成测试, 停止你的部署
✅ 你现在可以继续下一步。
{matchmaker-url}/swagger/v1/swagger.json
5. 游戏集成
在玩家离开后。 Matchmaker 与以下内容集成:☑️ 在
Unity Unreal 引擎学习中心 由 Edgegap:
导入简单示例脚本 并根据您的需求进行自定义,
虚幻引擎 Unreal 引擎学习中心:
从 Fab 市场 安装 (个人使用免费),
导入简单示例蓝图 并根据您的需求进行自定义。
在玩家离开后。 Matchmaker 与以下内容集成:中,我们建议通过游戏内 UI 向玩家提供票据状态更新以获得最佳玩家体验。参见: ,确保你正在对可重试的 429 请求过多(Too Many Requests)
在玩家离开后。 Matchmaker 与以下内容集成:错误使用指数退避和重试处理,以在突发流量期间给 matchmaker 恢复时间。
,确保你正在处理不可重试的错误:404 未找到(Not Found)- 票据已被删除,500 内部服务器错误(Internal Server Error)
在玩家离开后。 - 临时服务中断。游戏服务器
,读取玩家偏好和初始服务器上下文: 注入变量(Matchmaker)
以检索初始玩家的匹配数据。 注入变量(应用版本)
用于版本参数、设置和密钥。 注入变量(部署)
用于部署信息、IP、位置等。 ☑️ 一旦玩家连接, 游戏服务器和游戏客户端
启动加载场景 - 3D 场景、类似大堂的社交 UI,或带进度条的加载屏幕,以表示初始化正在进行。 ☑️ 确保你的 部署将在比赛结束后被正确停止。
🙌 恭喜,你已完成 Matchmaking 集成!要了解更多,请继续阅读。
🏁 高级示例
一个利用所有匹配功能的完整配置,包括 ,删除所有票据并导致短暂停机。, 规则,和 深入解析 可能看起来像这样:
🎾 自定义大厅
自定义大厅(私人大厅、沙盒关卡)是客厅多人游戏和在新功能进入主模式前测试新功能的非常受欢迎的选项。通常需要最少的限制,但目标是确保玩家可以 深入解析.
添加 custom-lobby-example 以获得替代方案), 到你现有的 matchmaker 中 以支持自定义大厅。
🥛 Backfill 展示
基于 匹配系统,此配置展示了 Backfill(补位) HOST_ASSIGNED 组(Groups).
可选地,某些游戏可能有特殊的匹配需求,例如:
允许新玩家加入进行中的比赛(好友或“随机玩家”),
在服务器启动后替换弃赛的玩家(离开者),以避免重启比赛,
允许观众加入并观看锦标赛或好友比赛(电子竞技),
将玩家集中到更大的服务器以提供更多社交互动(大型多人在线游戏)。
回填是一个 由服务器持有的票据,代表当前连接到服务器的玩家。 这可确保新加入的玩家在与当前玩家匹配时会遵守你的匹配规则。
深入解析 以替代 Seat/Match 会话。Matchmaker 仅支持默认会话。

回填忽略 player_count 规则,并且始终精确匹配一个组. backfill_group_size 使用轮询策略控制队伍容量,以受控方式均匀填充队伍。
完成成功回填的步骤如下:
服务器为每个缺少玩家的队伍创建一个回填,使用来自以下项的值:
真实
分配从以下位置检索的数据 未捕获的服务器异常会导致部署的容器重启并使 TLS 安全失效。在这种情况下, (部署)。当前连接玩家的
票据:来自 深入解析 (匹配器),先前回填的
assigned_ticket响应,或为匹配特定玩家而操纵的模拟数据,替换
backfill_group_size具有可能的组大小的值 最多到可用容量,
游戏客户端创建新的票据(成员资格)并包含
backfill_group_size值:"1"如果玩家是单独进行匹配。"2"如果玩家是总共 2 人匹配组的一部分.“new”如果玩家启用了在加入进行中比赛之外也能开启新游戏。
游戏客户端继续 深入解析 并将玩家与匹配的回填配对。
如果回填的组没有完全填满队伍,服务器可以使用新回填玩家的票据重复此过程,以添加更多玩家并达到期望的队伍规模。
⚔️ 竞技游戏
竞技游戏侧重于玩家相互竞争以取得胜利,无论是作为个人(混战)还是队伍。通过将技能水平相似的玩家或队伍配对以确保公平和平衡的比赛,并通过快速找到公平竞争来维持游戏节奏。
你可以 定义多个队伍,每队 1 名或多名玩家,例如:
5v5 FPS
2
5
10
5v5 MOBA
2
5
10
20x3 大逃杀
20
3
60
10 人混战
1
10
10
定义多个 ,删除所有票据并导致短暂停机。 用于针对游戏模式的特定规则和设置,且 按需扩展.
对于所有比赛:
限制 匹配延迟(matchmaking latency) 以防止匹配到远距离的玩家,
深入解析 用于预制队伍并防止超过队伍规模,
随着时间慢慢放宽延迟限制以找到更多玩家,
为特定配置文件分配更多 CPU 或内存, 应用与版本 用于特定配置文件,
对于休闲比赛:
省略等级限制以最大化匹配速度和匹配填充率,
让玩家提供他们的地图偏好以找到适合所有人的地图,
指定补位组大小以在不超过队伍规模的情况下替换离开的玩家,
移除延迟限制以保证在 3 分钟(180 秒)排队时间后产生匹配。
对于竞技比赛:
限制等级以仅允许相似技能水平的对手,
使用升降等级机制在联赛等级极端处匹配玩家。
对于顶尖 1% 的高技能比赛(挑战者):
使用数值技能评级(ELO)以在比赛中对技能分布进行精细控制,
由于玩家数量较少,在放宽延迟要求前等待更长时间。
使用多个配置文件来 分离休闲游戏模式、竞技游戏模式和顶级挑战者 玩家,可让你为每类玩家单独自定义规则和扩展。
🤝 合作游戏
合作游戏要求玩家作为一个团队为共同目标或对抗 AI 敌人而协作。将具有相似偏好和游戏习惯的玩家组合在一起。替换离开的玩家,并改进 添加并更新了示例请求/响应, 以提供响应迅速的玩家体验。
当队伍数量为 1 且最大队伍规模为 4 时, 每场比赛最多需要 4 名玩家.
定义多个 ,删除所有票据并导致短暂停机。 针对游戏模式的特定规则和设置:
从至少 4 名玩家开始以保持玩家在队列中并最大化匹配填充率,
限制 匹配延迟(matchmaking latency) 以防止匹配到远距离的玩家,
让玩家选择特定的游戏难度以适应每个人的技能水平,
让玩家提供他们的地图偏好以找到适合所有人的地图,
限制玩家等级差异以要求相似的游戏进度程度,
指定补位组大小以在不超过服务器容量的情况下替换离开的玩家,
使用管理标志将低信誉玩家和作弊者从普通玩家中分离,
深入解析 用于预制队伍并在不超过服务器容量的情况下填充队伍,
为其他配置文件分配更多 CPU 或内存, 应用与版本 使用不同的
从理想条件开始,然後 扩展限制 以确保快速匹配:
随着时间放宽延迟限制以找到更多玩家,
增加允许的玩家等级差异以找到更多玩家,
降低最小队伍规模以需要更少玩家并更快开始游戏,
服务器可以用 AI 队友填充空位,
team_count 深入解析 以便稍后添加玩家,
将最小队伍规模设置为 1,以在 150 秒的排队时间后单人启动游戏
🎈 社交游戏
社交游戏侧重于通过协作、交流和共享体验建立玩家之间的联系与关系。支持大量玩家,最大化匹配填充率,并对齐玩家偏好与游戏习惯。替换离开的玩家,并确保高水平的 添加并更新了示例请求/响应, 以提供响应迅速的玩家体验。
当队伍数量为 1(混战)且最大队伍规模为 50 时, 每场比赛最多需要 50 名玩家.
定义 ,删除所有票据并导致短暂停机。 针对游戏模式的特定规则和设置:
限制 匹配延迟(matchmaking latency) 以防止匹配到远距离的玩家,
让玩家提供他们的游戏模式偏好并找到适合所有人的模式,
指定补位组大小以在不超过服务器容量的情况下替换离开的玩家,
使用管理标志将低信誉玩家和作弊者从普通玩家中分离,
深入解析 用于预制大厅或在不超过服务器容量的情况下填充队伍,
为其他配置文件分配更多 CPU 或内存, 应用与版本 使用不同的
从理想条件开始,然後 扩展限制 以确保快速匹配:
随着时间放宽延迟限制以找到更多玩家,
慢慢降低最小队伍规模以需要更少玩家并更快开始游戏,
服务器可以用 AI 玩家填充空位,
team_count 深入解析 以便稍后添加玩家,
将最小队伍规模设置为 1,以在 150 秒的排队时间后单人启动游戏
最后更新于
这有帮助吗?

