> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 匹配的工作原理

> 了解 PlayFab 匹配循环:如何植入工单、按距离得分排名、根据队列规则验证,并将工单分组为完整对局。

本文介绍 PlayFab Matchmaking 如何评估工单、应用规则并形成对局。理解匹配过程有助于你设计能够高效产生高质量对局的队列配置。

## 对局形成概览

当你向队列提交工单时,匹配服务会将其与其他等待的工单放在一起。服务会持续运行一个**匹配循环**,尝试将兼容的工单组合到对局中。以下是每一步中发生的情况:

1. **移除过期工单。** 超过其 `GiveUpAfterSeconds` 超时的工单将被取消。
2. **按等待时间对工单排序:**等待时间最长的工单将成为潜在对局的**种子**或起点。
3. **候选者按兼容性排名:**每张剩余工单根据队列规则,根据其属性与种子工单的匹配程度获得一个**距离得分**。
4. \*\*贪婪地构建一组:\*\*从最接近的候选者开始,每次一张地将工单添加到组中,直到达到 `MaxMatchSize`。
5. \*\*每次添加均经验证:\*\*添加工单时,每条规则都会检查该候选者是否仍与当前组兼容。如果任何规则拒绝,则跳过该候选者。
6. \*\*完整组经验证:\*\*当组达到至少 `MinMatchSize` 时,最终验证阶段会确认该组满足所有规则。如果通过,则创建对局。
7. \*\*回溯:\*\*如果无法形成有效的组,服务会移除最后添加的工单,并尝试下一个候选者。此过程会在放弃当前种子之前探索其他分组方式。

然后,服务会以下一张等待时间最长的工单作为新种子,并重复该过程。

<Note>
  该算法优先处理等待时间最长的工单。此优先级确保等待时间最长的玩家最先获得对局。
</Note>

## 规则如何影响匹配

规则在对局形成过程中有两个用途:**过滤**和**排序**。

### 过滤

规则可以阻止工单加入某个组。例如,应用于游戏 build 版本的 `StringEqualityRule` 会拒绝任何 build 与该组的 build 不匹配的工单。匹配服务在每次考虑候选者时都会检查过滤,而不仅是开始时的一次性检查。

### 排序(距离)

规则还会贡献一个**距离得分**,决定哪些候选者先被尝试。距离越小,兼容性越高。

* 属性值完全相同的工单通常得到距离 **0**。
* 处于规则允许范围边缘的工单得到距离接近 **1**。
* 超出允许范围的工单会被过滤掉(实际上距离为无穷大)。

当队列有多条规则时,每条规则的距离会乘以其[权重](/services/playfab/multiplayer/matchmaking/config-queues)并相加。工单按总距离从低到高顺序尝试,因此最兼容的候选者先被尝试。

<Tip>
  使用规则权重来表达相对重要性。例如,如果技能相似性比区域偏好更重要,则赋予技能规则更高的权重。
</Tip>

### 验证

某些约束只能在完整组形成之后才能检查。例如,团队平衡规则(`TeamDifferenceRule`、`TeamSizeBalanceRule`)需要看到完整的组才能评估团队是否平衡。这些规则作为最终验证步骤运行。

## 扩展与放宽

当工单等待时,规则会**放宽**其约束以扩大搜索范围。有两种机制控制此过程:

* **扩展**:规则会随时间逐步调整其阈值。例如,技能阈值为 0.2 的 `DifferenceRule` 可能每 5 秒扩展 0.1,最终允许 0.5 的差距。
* **Seconds until optional**:在配置的时长之后,规则完全停止过滤。规则仍然对排序(距离)有贡献,但不再阻止对局。

扩展始终是**基于时间**的。它根据工单等待时间的长短统一应用于所有工单。等待时间越长的工单自然会达到更宽的扩展阶段,并能与更大的候选池匹配。

<Note>
  放宽并不意味着忽视对局质量。即使规则变得可选,它仍会对排序步骤贡献距离。满足规则的候选者仍会优先于不满足的候选者被尝试。
</Note>

有关配置扩展的更多详细信息,请参阅[配置匹配队列](/services/playfab/multiplayer/matchmaking/config-queues)。

## 扩容与分区

当队列接收到大量工单时,服务会将工单**分区**为多个独立评估的组。分区使用能自然将人群分割的规则属性。例如,应用于游戏模式的 `StringEqualityRule` 可创建清晰的分区边界。

随着负载降低,分区会重新合并。此过程为服务提供更大的候选池并提高对局质量。

有关设计可良好扩展的队列的更多详细信息,请参阅[匹配扩容](/services/playfab/multiplayer/matchmaking/matchmaking-partition)。

## 为非对称偏好而设计

某些匹配场景涉及非对称偏好——即玩家 A 愿意与玩家 B 匹配,但玩家 B 不愿与玩家 A 匹配。跨平台游戏设置是最常见的例子。有关推荐的配置模式和已完成的示例,请参阅[处理非对称跨平台游戏偏好](/services/playfab/multiplayer/matchmaking/config-examples#handling-asymmetric-cross-play-preferences)。

## 另请参阅

* [配置匹配队列](/services/playfab/multiplayer/matchmaking/config-queues)
* [匹配场景和配置示例](/services/playfab/multiplayer/matchmaking/config-examples)
* [匹配扩容](/services/playfab/multiplayer/matchmaking/matchmaking-partition)


## Related topics

- [匹配](/zh-CN/services/playfab/multiplayer/matchmaking/index.md)
- [了解 PlayFab Party 聊天的工作原理](/zh-CN/services/playfab/community/voice-communications/concepts-chat.md)
- [用于 PlayFab API 的 Microsoft Entra ID 身份验证](/zh-CN/services/playfab/identity/dev-identity/authentication/entra-id-api-authentication.md)
- [使用 Microsoft Store 市场进行兑换](/zh-CN/services/playfab/economy-monetization/economy-v2/marketplace/marketplace-redemption/microsoft.md)
- [PlayFab 用户角色](/zh-CN/services/playfab/identity/dev-identity/permissions/playfab-user-roles.md)
