目标会话初始化和 QoS
本主题介绍了游戏如何确认有足够的玩家加入,并且在匹配到目标会话时可以连接。
一组玩家通过 SmartMatch 匹配被匹配到目标会话。 游戏必须采取措施确认有足够的玩家加入,以便在需要时能够成功地相互连接。 此过程称为 目标会话初始化。
对于使用点对点网络拓扑结构的游戏,目标会话初始化的一个重要方面是服务质量 (QoS) 的测量和评估。 相关操作如下。
- 对 Xbox One (或更高版本) 控制台之间或控制台与服务器之间的延迟和带宽的测量。
- 对得出的测量结果进行评估,以确定节点之间的网络连接是否良好
以下流程图说明了如何实现目标会话的初始化和 QoS 操作。
托管的初始化
多人游戏会话目录 (MPSD) 支持名为 托管初始化 的功能,通过它来协调参与会话的所有客户端目标会话初始化的过程。 MPSD 自动跟踪初始化阶段和相关的会话超时。 如有需要,MPSD 还对客户之间的连接性进行评估。 托管初始化由 XblMultiplayerInitializationStage 枚举表示。
注意
强烈建议你的游戏使用 SmartMatch 匹配以充分利用 MPSD 受管初始化功能。
托管初始化剧集和阶段
每当匹配将新的玩家添加到会话中时,目标会话就会进行托管性初始化。 SmartMatch 添加会话成员,用户状态为“已保留”,即每个成员占用一个位置,但尚未加入会话。 每组新玩家将触发新的初始化剧集。
当初始化完成后,这些玩家在该过程中要么成功,要么失败。 成功初始化的玩家可以通过使用目标会话进行游戏。 失败的玩家必须重新提交给匹配服务,以在另一个会话中进行匹配。
对于提交会话给匹配的情况,preserveSession
参数设置为 Always
,会话中预先存在的成员不进行初始化,因为 MPSD 假设他们已经正确设置。
每个托管初始化情节都包括以下阶段。
-
加入: 会话成员将自己写入会话,将他们的用户状态从
Reserved
移动到Active
。 他们可以上传基本数据,如安全设备地址。 - 测量: 对于基于对等的拓扑结构,会话成员相互测量 QoS,然后将结果上传到会话。
- 评估: MPSD 评估最后两个阶段的结果,然后确定会话或成员是否已成功初始化。
在会议上运行游戏代码以通过加入和测量阶段推进每个玩家 (因此也是会议)。 然后在评估阶段成功或失败后,游戏可以开始进行游戏或回到匹配。
配置初始化的目标会话
游戏可通过使用正在初始化的目标会话中的常量来配置托管初始化过程。 这些常量在会话模板中的 /constants/system 下设置,版本为107。 推荐该模板版本。
可进行以下两种类型的配置设置。
配置整个托管初始化过程的设置
配置 QoS 要求的设置
有关常用游戏情景的绘画模板示例,请参阅多人游戏会话模板和多人游戏会话目录概述。
注意
如果目标会话初始化配置中未定义 QoS 要求,则会跳过初始化期间的度量阶段。
整体配置托管初始化
为了全面控制管理的初始化,请设置以下字段。
为控制托管初始化而设置的字段是/constants/system/memberInitialization
对象的一部分。
joinTimeout
: 指定 MPSD 在初始化剧集开始后,等待每个成员加入的时间。 默认值为 10 秒。measurementTimeout
: 指定 MPSD 在测量阶段开始后,等待每个成员上传 QoS 测量结果的时间。 默认值为 30,000 秒。membersNeededToStart
: 指定必须在初始化时成功的成员数量,才能使第一个初始化剧集成功。 默认值为 1。
注意
如果不满足此阈值,所有成员初始化均失败。
配置 QoS 要求
如果游戏使用对等或端点对主机拓扑,则只在初始化过程中才需要 QoS。 每个拓扑映射到 /constants/system/ 下的拓扑特定常量。
配置对等拓扑的 QoS 要求
注意
游戏为对等拓扑进行 QoS 要求设置的情况很少见。 这些设置非常具有限制性,给那些有严格网络地址转换 (NAT) 的玩家带来了问题。
可在 peerToPeerRequirements
对象中设置点对点拓扑结构的 QoS 要求。
每个客户端必须能够与其他每个客户端连接。
peerToPeerRequirements
对象具有以下相关字段。
latencyMaximum
: 指定任何两个客户端之间的最大延迟bandwidthMinimum
: 指定任何两个客户端之间的最小带宽
配置端点对主机拓扑的 QoS 要求
可在 peerToHostRequirements
对象中设置端点对主机拓扑结构的 QoS 要求。
每个客户端必须能够与单个常用主机连接。
如果配置了该对象并且初始化成功,MPSD 就会创建一个潜在主机初始客户列表,称为 主机候选者。
设置以下字段。
latencyMaximum
: 指定每个对等体和主机之间的最大延时bandwidthDownMinimum
: 指定每个对等体和主机之间的最小下行带宽bandwidthUpMinimum
: 指定每个对等体和主机之间的最小上游带宽hostSelectionMetric
: 指定用于选择主机的度量