> ## 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.

# 目标会话初始化和 QoS

> XBOX 上 SmartMatch 的目标会话初始化，涵盖托管初始化阶段以及在开始游戏前对等端之间的服务质量检查。

本主题介绍当玩家被匹配到目标会话时，游戏如何确认已加入足够玩家并能够连接。

一组玩家由 SmartMatch 匹配到目标会话。游戏必须采取步骤以确认已加入足够玩家，以便他们在需要时能够成功相互连接。此过程称为*目标会话初始化*。

对于使用对等网络拓扑的游戏，目标会话初始化的一个重要方面是服务质量 (QoS) 的测量和评估。
相关操作如下：

* 测量 XBOX One（或更新版本）主机之间或主机与服务器之间的延迟和带宽
* 评估最终测量结果，以确定节点之间的网络连接是否良好

以下流程图展示了如何实现目标会话的初始化和 QoS 操作。

<img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/Multiplayer_2015_Matchmaking_QoS.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=d581bf4774ce705effe9420a8246f98a" alt="Image of a matchmaking QoS flowchart that illustrates how to implement the initialization of the target session and QoS operations" width="1339" height="1090" data-path="images/gdk/services/Multiplayer_2015_Matchmaking_QoS.png" />

## 托管初始化

Multiplayer Session Directory (MPSD) 支持一项称为*托管初始化*的功能，通过它协调涉及会话的客户端之间的目标会话初始化流程。
MPSD 自动跟踪会话的初始化阶段及相关超时。MPSD 还根据需要评估客户端之间的连接性。
托管初始化由 [XblMultiplayerInitializationStage](/reference/live/xsapi-c/multiplayer_c/enums/xblmultiplayerinitializationstage) 枚举表示。

<Note>我们强烈建议您的游戏使用 SmartMatch 匹配，以利用 MPSD 托管初始化功能。</Note>

### 托管初始化情节和阶段

只要匹配向目标会话添加新玩家，目标会话就会经历托管初始化。
SmartMatch 以用户状态 Reserved 添加会话成员，这意味着每个成员占用一个位置但尚未加入会话。
每组新玩家会触发一个新的初始化情节。

初始化完成后，每个玩家在此过程中要么成功要么失败。
初始化成功的玩家可以使用目标会话进行游戏。
初始化失败的玩家必须重新提交到匹配以匹配到另一个会话。

对于使用 `preserveSession` 参数设置为 `Always` 提交到匹配的会话，会话的现有成员不会经历初始化，因为 MPSD 假定它们已正确设置。

每个托管初始化情节由以下阶段组成。

* **加入：** 会话成员将自己写入会话，以将其用户状态从 `Reserved` 转移到 `Active`。他们可以上传基本数据，例如安全设备地址。
* **测量：** 对于基于对等的拓扑，会话成员相互测量 QoS，然后将结果上传到会话。
* **评估：** MPSD 评估最后两个阶段的结果，然后确定会话或成员是否已成功初始化。

游戏代码作用于会话，以推动每个玩家（因此推动会话）通过加入和测量阶段。
在评估阶段成功或失败后，游戏可以开始游戏或返回到匹配。

## 为初始化配置目标会话

游戏可以使用正在初始化的目标会话中的常量来配置托管初始化流程。
这些常量在版本 107 的会话模板中的 */constants/system* 下设置。我们推荐使用此模板版本。

您可以进行以下两种类型的配置设置。

* 配置整个托管初始化流程的设置

* 配置 QoS 要求的设置

有关常见游戏场景的会话模板示例，请参见[多人游戏会话模板](/services/xbox-services/multiplayer/mpsd/concepts/live-session-templates)和 [Multiplayer Session Directory 概述](/services/xbox-services/multiplayer/mpsd/live-mpsd-overview)。

<Note>如果未在目标会话初始化配置中定义 QoS 要求，则在初始化期间会跳过测量阶段。</Note>

### 整体配置托管初始化

要整体控制托管初始化，请设置以下字段。

用于控制托管初始化的字段是 `/constants/system/memberInitialization` 对象的一部分。

* `joinTimeout`：指定初始化情节开始后 MPSD 等待每个成员加入的时长。默认值为 10 秒。

* `measurementTimeout`：指定测量阶段开始后 MPSD 等待每个成员上传 QoS 测量结果的时长。默认值为 30,000 秒。

* `membersNeededToStart`：指定第一个初始化情节成功所需成功初始化的成员数量。默认值为 1。

<Note>如果未达到此阈值，则所有成员的初始化都将失败。</Note>

### 配置 QoS 要求

仅当游戏使用对等或对等到主机拓扑时，才需要在初始化期间进行 QoS。
每种拓扑映射到 */constants/system/* 下的特定拓扑常量。

#### 为对等到对等拓扑配置 QoS 要求

<Note>游戏很少为对等到对等拓扑设置 QoS 要求。这些设置非常严格，会对具有严格网络地址转换 (NAT) 的玩家造成问题。</Note>

您可以在 `peerToPeerRequirements` 对象中设置对等到对等拓扑的 QoS 要求。
每个客户端必须能够连接到每个其他客户端。

`peerToPeerRequirements` 对象具有以下相关字段。

* `latencyMaximum`：指定任何两个客户端之间的最大延迟

* `bandwidthMinimum`：指定任何两个客户端之间的最小带宽

#### 为对等到主机拓扑配置 QoS 要求

您可以在 `peerToHostRequirements` 对象中设置对等到主机拓扑的 QoS 要求。
每个客户端必须能够连接到单个公共主机。
如果配置了此对象且初始化成功，MPSD 将创建潜在主机客户端的初始列表，称为*主机候选*。

设置以下字段。

* `latencyMaximum`：指定每个对等端与主机之间的最大延迟

* `bandwidthDownMinimum`：指定每个对等端与主机之间的最小下行带宽

* `bandwidthUpMinimum`：指定每个对等端与主机之间的最小上行带宽

* `hostSelectionMetric`：指定用于选择主机的度量标准

## 另请参见

[多人游戏会话模板](/services/xbox-services/multiplayer/mpsd/concepts/live-session-templates)

[Multiplayer Session Directory 概述](/services/xbox-services/multiplayer/mpsd/live-mpsd-overview)


## Related topics

- [XblMultiplayerInitializationStage](/zh-CN/reference/live/xsapi-c/multiplayer_c/enums/xblmultiplayerinitializationstage.md)
- [XblMultiplayerMeasurementFailure](/zh-CN/reference/live/xsapi-c/multiplayer_c/enums/xblmultiplayermeasurementfailure.md)
- [XblMultiplayerMetrics](/zh-CN/reference/live/xsapi-c/multiplayer_c/enums/xblmultiplayermetrics.md)
- [XblMultiplayerPeerToHostRequirements](/zh-CN/reference/live/xsapi-c/multiplayer_c/structs/xblmultiplayerpeertohostrequirements.md)
- [匹配概述](/zh-CN/services/xbox-services/multiplayer/matchmaking/live-matchmaking-overview.md)
