merge匹配服务

快速开始使用Matchmaking并探索各种类型的示例场景。

观看此视频以开始使用我们的Matchmaker服务:

✔️ 准备工作

Matchmaking 架构

本指南将重点介绍 Matchmaking API 和 Backfill API.

在涉及匹配时,有四(4)个重要的数据流:

  1. Matchmaking API 由游戏客户端用于与 Matchmaker 通信:

    1. 用于组管理、服务器分配和监控,

    2. 用于与 的延迟测量, Ping 信标.

  2. 部署 API 由 Matchmaker 用于部署、扩展和管理您的专用服务器。

  3. 网络代码传输(Netcode Transports) 用于在游戏客户端和专用服务器之间通信。

  4. 深入解析 用于替换或向正在运行的服务器添加玩家。

circle-info

发布后, 您的 matchmaker 需要全天候 24/7 运行 以确保全球各地的玩家能够加入服务器。

🍀 简单示例

从一个简单示例开始并测试基本的匹配玩家流程:

  • 在共享 上创建 matchmaker 实例, 深入解析,

  • 在您的 matchmaker 中定义规则和设置, 深入解析,

  • 使用 管理并测试玩家流程和工单(tickets), 📗 API.

1. 在免费套餐上设置

☑️ 注册您的免费 Edgegap 帐户arrow-up-right 并打开 Matchmaker 仪表板页面arrow-up-right.

☑️ 点击 创建 Matchmaker 首先,然后输入:

  • matchmaker 名称 - 供您参考,例如: quickstart-dev ,

  • 上传我们的简单示例 JSON 配置。

🍀 简单示例(推荐的最小配置):

triangle-exclamation

故障排除与常见问题:

☑️ 如果没有出现验证错误,请点击 创建并启动 并等待过程完成。这样将启动一个新的免费集群,并运行您的简单示例 matchmaker。

✅ 您现在可以继续下一步。

2. 探索配置

随着我们发布 Matchmaker 的更新,每个新版本都使用 语义化版本控制(semantic versioning) 通过解析格式来清楚传达更改的影响 major.minor.patch(主.次.修订):

  • 🔥 主(major) 版本包含破坏性更改,需要进行集成审查,

  • 🌟 次(minor) 版本包含大量向后兼容的改进,

  • 🩹 修补(patch) 版本包含错误修复和小幅改进。

启用 inspect(检查)工单 以便在开发时更好地理解和调试可能的匹配流程。我们建议在实时 matchmaker 中禁用 inspect API。

某些 部署可能导致错误. 我们尝试通过自动重试部署最多 max_deployment_retry_count(最大部署重试次数) 次来解决此问题(无需客户端确认)。

为确保意外的客户端崩溃或被遗弃的工单不会长时间占用您的 matchmaker 资源,未匹配的工单将在 ticket_expiration_period(工单过期期)之后被取消, 导致其状态更改为 CANCELLED(已取消) 然后在 ticket_removal_period(工单移除期)之后被永久删除, .

我们的匹配核心逻辑配置位于 ,删除所有票据并导致短暂停机。配置文件(队列)。每个配置文件都是完全隔离的匹配队列,指向 应用与版本 并具有预定义数量的所需 CPU 和内存(RAM)资源。

规则 在初始规则集中 必须满足以将玩家分组,每个规则由三个属性定义:

  • 您自选的名称,例如 - 匹配大小(match size),

  • 规则类型,也称为运算符,例如 - player_count(玩家计数),

  • 最后是运算符属性,例如: team_count(队伍数量)max_team_size(最大队伍大小).

玩家计数规则(Player Count Rule)

这是一个特殊规则,定义需要多少玩家匹配以开始分配:

  • team_count(队伍数量) 指的是队伍数量,1 个队伍可用于合作或混战模式,

  • min_team_size(最小队伍大小) 指每队的最少玩家数。

  • max_team_size(最大队伍大小) 指每队的最多玩家数。

我们的简单示例演示了一个 2 人合作游戏。

circle-exclamation

延迟规则(Latencies Rule)

✅ 您现在可以继续下一步。

3. 查看实例详情

☑️ 一旦初始化,请在我们的仪表板中查看新 matchmaker 的详细信息:

  • 状态(Status) 指示服务健康状况,可能为 ONLINE、OFFLINE 或 ERROR。

  • 标识符(Identifier) 有助于 Edgegap 员工在您需要故障排除帮助时快速找到您的 matchmaker。

  • 启动时间(Started at) 可用于追踪最近的更新时间。

  • 规模(Size) 对应我们的一种 定价层(Pricing Tiers)arrow-up-right.

  • API URL 将被游戏客户端和游戏服务器用于与您的 matchmaker 通信。

  • Swagger URL 是我们提供的用于探索 API 模式的实用 openAPI 规范 GUI。

  • 认证令牌(Auth Token) 是游戏客户端和游戏服务器用于身份验证的唯一秘密令牌。

triangle-exclamation

要测试您的新 matchmaker, 您需要 Swagger URL、API URL 和认证令牌(Auth Token).

✅ 您现在可以继续下一步。

circle-info

要在开发中更新您的 matchmaker 规则,请编辑配置并重启。

circle-check

4. 测试工单(Tickets)API

circle-info

请在启动 matchmaker 后等待最多 5 分钟, 以允许 DNS 传播完成。

☑️ 首先, 打开您的 Swagger URL 在 swagger GUI 中检查您的 openAPI 模式:

☑️ 点击 授权(Authorize) 🔒,粘贴您的 认证令牌(Auth Token),然后通过点击确认 授权(Authorize).

☑️ 向下滚动至 工单 API(Ticket API) - POST /tickets,展开并点击 试一试(Try it out).

☑️ 预览您的请求:

  • 注意到 player_ip(玩家 IP) 设置为 null - 这将导致 Matchmaker 使用自动添加到您请求的 IP 地址(参见 服务器到服务器 以了解替代方案),

  • attributes(属性) 包含您 matchmaker 规则的值,在本例中用于 延迟(latencies) 规则,

    • rule(规则) player_count(玩家计数) 是唯一一个在玩家工单中不需要任何属性的规则。

☑️ 点击 执行(Execute) 并查看对您的玩家工单请求的响应:

开始。 执行(Execute) ☑️ 通过再次点击

创建第二个工单,以便我们的两个玩家匹配并启动服务器。 ☑️ 收起 POST /tickets 并打开GET /tickets/{ticketId} 试一试(Try it out).

,然后点击 执行(Execute).

☑️ 在上一步响应中输入工单 ID 并点击

  • ☑️ 查看您玩家工单的更新后分配: 状态已更改为 MATCH_FOUND(匹配已找到) assignment(分配) 设置为 null 首先,同时保持

☑️ 点击 执行(Execute) 以表示玩家已匹配并且正在分配服务器,

  • ☑️ 查看您玩家工单的更新后分配: 再次检查您的工单,并查看您工单的更新分配: HOST_ASSIGNED(主机已分配) assignment(分配) 并且

chevron-right包含已分配服务器的详细信息。hashtag

故障排除与常见问题 SEARCHING(搜索中) .

  • 我的工单卡在了


请验证您是否已创建足够且具有重叠条件的工单以符合您的配置。 状态已更改为TEAM_FOUND(队伍已找到) 我的工单在 和 之间反复切换。

  • 免费套餐帐户一次仅限 1 个部署。请考虑升级或停止您当前的部署以启动新部署。


我的工单直接进入了 CANCELLED(已取消).

  • 您的工单已达到其过期时间。请重新创建新工单或在配置中增加过期时间以便测试。


在检查我的工单时收到 HTTP 404 Not Found。

  • 您的工单已被 DELETE 请求删除,或已达到其移除期(在工单过期后开始,按您的配置定义)。请重新创建新工单或在配置中增加过期/移除时长以便测试。

☑️ 在我们的仪表板中检查您的新部署arrow-up-right:

  • 注意每次部署都用所有工单 ID 和配置文件进行标记以增强可追溯性。

☑️ 尝试从您的游戏客户端连接到分配的服务器。

circle-exclamation

☑️ 一旦确认您能够无问题连接到部署并完成测试, 停止您的部署(Stop your Deployment) 以为您的帐户释放容量,供下一个构建使用。

✅ 您现在可以继续下一步。

circle-info

在此处查找用于测试的 openAPI 规范 {matchmaker-url}/swagger/v1/swagger.json.

5. 游戏集成

Matchmaker 与以下组件集成:

☑️ 在 游戏客户端(Game Client)中,我们建议使用游戏内 UI 向玩家提供工单状态更新以获得最佳玩家体验。参见:

☑️ 在 游戏客户端(Game Client),确保您正在处理可重试的 429 Too Many Requests(请求过多) 错误时采用指数退避并重试,给予 matchmaker 在突发流量期间恢复的时间。

☑️ 在 游戏客户端(Game Client),确保您正在处理不可重试的错误:

  • 404 Not Found(未找到) - 工单已被删除,

  • 500 Internal Server Error(内部服务器错误) - 临时服务中断。

☑️ 在 游戏服务器(Game Server),读取玩家偏好和初始服务器上下文:

  1. 注入变量(Matchmaker) 以检索初始玩家的匹配数据。

  2. 注入变量(应用版本) 用于版本参数、设置和密钥。

  3. 注入变量(部署) 用于部署信息、IP、位置等。

☑️ 一旦玩家连接, 游戏服务器和游戏客户端(Game Server and Game Clients) 启动加载场景——3D 场景、类似大厅的社交 UI,或带进度条的加载屏,以指示初始化正在进行。

☑️ 确保您的 部署在比赛结束后会被正确停止,arrow-up-right 以便妥善结束。

🙌 恭喜,您已完成 Matchmaking 集成!要了解更多,请继续阅读。

🏁 高级示例

一个利用所有匹配功能(包括 ,删除所有票据并导致短暂停机。配置文件(队列), 规则,和 深入解析 )的完整配置可能如下所示:

🎾 自定义大厅(Custom Lobby)

自定义大厅(私人大厅、沙盒关卡)是沙发多人游戏和在进入主游戏模式之前测试新功能的非常受欢迎的选项。通常需要最少的限制,但目标是确保玩家能够 深入解析.

circle-info

对于没有公开访问的私人大厅,设置 "team_size": 1 并让组所有者单独启动游戏。所有者可以将组和主机分配详细信息分享给任意数量的成员以加入。

circle-check

🥛 Backfill 展示(Backfill Showcase)

基于 匹配服务,此配置展示了 Backfill(补位) HOST_ASSIGNED(主机已分配) 组(Groups).

⚔️ 竞技游戏(Competitive Games)

竞技游戏侧重于玩家相互竞争以取得胜利,无论是作为个人(混战)还是团队。通过将技能水平相近的玩家或队伍配对,确保公平和平衡的对局,并通过快速找到公平的竞争对手来保持游戏节奏。

您可以 定义多个队伍,每队包含 1 名或多名玩家,例如:

游戏模式(Game Mode)
队伍数量(Team Count)
队伍大小(Team Size)
总玩家数(Total Players)

5v5 FPS

2

5

10

5v5 MOBA

2

5

10

20x3 大逃杀(Battle Royale)

20

3

60

10 人 混战(Free For All)

1

10

10

为游戏模式特定的规则和设置定义多个 ,删除所有票据并导致短暂停机。配置文件(队列) ,并根据需要 扩展.

  • 对于所有比赛:

  • 对于休闲比赛:

    • 省略排名限制以最大化匹配速度和匹配填充率,

    • 让玩家提供他们的地图偏好以找到适合所有人的地图,

    • 指定补位组大小以在不超过队伍大小的情况下替换离开的玩家,

    • 在 3 分钟(180 秒)排队时间后删除延迟限制以保证匹配。

  • 对于竞技比赛:

    • 限制排名以仅允许技能水平相近的对手,

    • 使用升级或降级排名来匹配联赛排名极端的玩家。

  • 对于顶尖 1% 的高技能对局(挑战者):

    • 使用数值技能评分(例如 ELO)来对比赛中的技能分布进行精细控制,

    • 由于玩家数量较少,在放宽延迟要求前等待更长时间。

circle-check

🤝 合作游戏(Cooperative Games)

合作游戏要求玩家作为一个团队为共同目标或对抗 AI 敌人而协作。将具有相似偏好和游戏习惯的玩家匹配在一起。替换离开的玩家,并改进 Ping 信标 以提供响应迅速的玩家体验。

在队伍数量为 1 且最大队伍大小为 4 的情况下, 每场比赛最多需要 4 名玩家,.

为游戏模式特定的规则和设置定义多个 ,删除所有票据并导致短暂停机。配置文件(队列) 用于游戏模式特定的规则和设置:

  • 以至少 4 名玩家开始以保持队列并最大化匹配填充率,

  • 限制 匹配延迟(matchmaking latency) 以防止匹配远距离玩家,

  • 让玩家选择特定的游戏难度以适应每个人的技能水平,

  • 让玩家提供他们的地图偏好以找到适合所有人的地图,

  • 限制玩家等级差异以要求相似的游戏进度,

  • 指定补位组大小以在不超过服务器容量的情况下替换离开者,

  • 使用管理标记将低信誉玩家和作弊者与一般玩家区分开,

  • 深入解析 对于预组队伍并在不超过服务器容量的情况下填充队伍,

  • 为其他配置文件使用不同的 应用与版本 来分配更多的 CPU 或内存。

从理想条件开始,随后 扩展限制 以确保快速匹配:

  • 随时间放宽延迟限制以找到更多玩家,

  • 增加允许的玩家等级差异以找到更多玩家,

  • 减少最小队伍大小以需要更少玩家并更早开始游戏,

    • 服务器可以用 AI 队友填补空位,

    • 深入解析 以便稍后添加玩家,

  • 将最小队伍大小设置为 1,以在 150 秒的排队时间后单人启动游戏,

🎈 社交游戏(Social Games)

社交游戏通过协作、沟通和共享体验来构建玩家之间的连接和关系。支持大量玩家,最大化匹配填充率,并对齐玩家偏好和游戏习惯。替换离开的玩家,并确保高水平的 Ping 信标 以提供响应迅速的玩家体验。

在队伍数量为 1(混战)且最大队伍大小为 50 的情况下, 每场比赛最多需要 50 名玩家,.

定义 ,删除所有票据并导致短暂停机。配置文件(队列) 用于游戏模式特定的规则和设置:

  • 限制 匹配延迟(matchmaking latency) 以防止匹配远距离玩家,

  • 让玩家提供他们的游戏模式偏好并找到适合每个人的模式,

  • 指定补位组大小以在不超过服务器容量的情况下替换离开者,

  • 使用管理标记将低信誉玩家和作弊者与一般玩家区分开,

  • 深入解析 用于预制大厅或在不超过服务器容量的情况下填充队伍,

  • 为其他配置文件使用不同的 应用与版本 来分配更多的 CPU 或内存。

从理想条件开始,随后 扩展限制 以确保快速匹配:

  • 随时间放宽延迟限制以找到更多玩家,

  • 逐步减少最小队伍大小以需要更少玩家并更早开始游戏,

    • 服务器可以用 AI 玩家填补空位,

    • 深入解析 以便稍后添加玩家,

  • 将最小队伍大小设置为 1,以在 150 秒的排队时间后单人启动游戏。

最后更新于

这有帮助吗?