我可以在标题中混用多人游戏活动 (MPA) 和多人游戏会话目录 (MPSD) 服务吗?
不可以,不能在标题中混用 MPA 和 MPSD 调用。标题需要根据功能需求选择使用哪种服务。如何从服务访问多人游戏会话目录 (MPSD) API?
有关详细信息,请参阅服务到服务的多人游戏会话管理。我的标题可以订阅多个会话的更改吗?
可以,每个连接最多可以订阅接收 10 个会话的更改。如果网络连接丢失或玩家关闭主机,玩家会立即被移除吗?
Web 套接字连接使多人游戏会话目录 (MPSD) 能够快速检测客户端断开连接并将客户端设置为“非活动”状态。一旦“非活动”移除的超时时间到期,会话成员会立即被移除。有关详细信息,请参阅“多人游戏会话高级主题”中的会话超时部分。如何确定要使用的服务配置 ID (SCID)、会话模板和沙盒?
如果您没有参与标题的初始注册(此信息就是在那时创建的),您就无法直接访问此信息。请联系您的开发者账户经理 (DAM),他们可以为您获取这些数据。您是否有可与我的标题请求正文进行比较的请求正文示例?
请参阅 MultiplayerSessionRequest (JSON) 中的请求结构。调用 MPSD 时收到 HTTP 403 状态代码,该怎么办?
这通常是权限或范围问题。收集 Fiddler 跟踪以获取更多信息,然后检查HttpResponse 正文中返回的消息以获取常见的 403 消息。
- “The requested service configuration cannot be accessed.”
- 确认您使用的账户有权访问沙盒。
- 确认您在正确的沙盒中。
- 如果您使用证书身份验证并收到此错误,请联系您的 DAM。
- “The requested session cannot be accessed. The calling user must have multiplayer privilege, and private sessions can only be read by session members.”
- 您无权查看该会话,可能是因为您正在尝试访问可见性为“私有”的会话。如果可见性设置为“私有”,则只有该会话的成员可以读取会话文档。
[!NOTE] 玩家必须拥有 XBOX Live Gold 账户才能注册新会话。如果没有 Gold 账户权限,注册新会话的请求会返回 HTTP 403。
- “The request body can’t contain existing member references unless the authentication principal includes a server.”
- 您不能代表另一个玩家将其加入到会话中。您只能邀请。若要邀请玩家,请将索引设置为
reserve_<number>。
- 您不能代表另一个玩家将其加入到会话中。您只能邀请。若要邀请玩家,请将索引设置为
调用 MPSD 时收到 HTTP 404 状态代码,该怎么办?
收集 Fiddler 跟踪以获取更多信息,然后执行以下步骤。- 检查
HttpResponse正文中返回的消息,以获取常见的 404 消息,例如以下内容。- “The requested service config is either invalid or not configured for sessions.” 确保您使用的是正确的 SCID。
- “The requested session wasn’t found.” 在检索会话之前,请确保已创建会话并且会话模板正确。您可以使用
PUT调用创建会话。
- 检查您正在使用的 URI。
- 重启主机,或以其他玩家身份登录。
- 在游戏开发者论坛中查找错误代码或其他解决方案。
- 确认会话没有因为为空而被删除。会话可能会因为玩家超时而变为空。发生这种情况时,通常是因为所有会话成员都处于应用了超时的状态(例如“就绪”或“非活动”)。有关详细信息,请参阅“多人游戏会话高级主题”中的会话用户状态部分。
调用 XblMultiplayerWriteSessionByHandleAsync 或 XblMultiplayerGetSessionByHandleAsync 时,为什么收到 HTTP 404 状态代码?
如果您的标题使用句柄响应包含句柄 ID 的加入协议激活来访问 MPSD 会话,则协议激活中的句柄 ID 可能因以下原因之一而过时。- 标题从中发起加入的 XBOX shell UI 视图可能已过时。某些 UI 视图(例如玩家的个人资料卡片)在打开时不会自动刷新加入句柄。为避免收到 HTTP 404 状态代码,标题应在加入前关闭并重新打开视图以刷新数据。
- 在标题从 XBOX shell UI 中选择加入操作后,标题要加入的玩家可能已切换了活动会话。这种情况很少见。
调用 MPSD 时,为什么我会收到 HTTP 412 状态代码?
如果会话已存在,以下请求将返回 HTTP 412。If-Match 标头不匹配,以下请求将返回 HTTP 412。
调用 MPSD 时,为什么我会收到 HTTP 400、405、409、503 或类似的状态代码?
收集 Fiddler 跟踪以获取更多信息,然后检查HttpResponse 正文中返回的消息。有了这些信息,您应该能够识别并修复错误。如果不能,请在开发者论坛中搜索解决方案。
如果您使用的是 XBOX 服务 API (XSAPI),您也可以获取响应正文,如对 XBOX 服务 API 进行故障排除中所述。或者,您的代码可以使用 HCTraceSetClientCallback 将输出发送到您的标题 UI。
我可以或应该在标题的会话模板中更改什么?
会话模板是您的会话的模式,您无法覆盖模板中已设置的常量。但是,您可以向模板添加新属性。有关详细信息,请参阅多人游戏会话模板和多人游戏会话目录概述。为什么我收到一条错误消息,提示我的会话未初始化?
以下是您可能收到的错误消息示例。400 - \[ResponseBody\]: This session is configured for managed initialization requiring at least 2 members to start.
无法创建会话,因为请求中没有包含足够多的将 initialize 字段设置为 true 的会话成员预留。您的代码可以使用 XblMultiplayerSessionAddMemberReservation 或 XblMultiplayerSessionJoin 的 initializeRequested 参数为成员设置此字段。
在会话模板中指定初始化时,请确保为足够多的成员预留设置了 "initialize": true,以通过匹配服务质量 (QoS) 要求。有关详细信息,请参阅目标会话初始化和 QoS。
收到 HTTP 204 状态代码时,为什么我的会话未创建?
此状态代码表示您在创建会话时没有向会话添加任何玩家。如果在创建会话时会话中没有玩家且会话空超时为零(默认值),则不会创建会话。 确保在创建会话时至少包含一个玩家。对于专用服务器场景,获取正在尝试创建匹配或需要创建匹配的玩家,并使该玩家成为匹配中的初始玩家。或者,您可以更改或删除会话空超时。有关详细信息,请参阅“多人游戏会话高级主题”中的会话超时部分。我应该在什么时候轮询 MPSD?
您的标题必须避免轮询 MPSD。如果标题必须发现 MPSD 会话的更改,则应订阅会话更改事件。有关详细信息,请参阅“多人游戏任务”主题中的订阅 MPSD 会话更改通知部分。我可以使用 XblMultiplayerQuerySessionsAsync 实现会话浏览或匹配吗?
XblMultiplayerQuerySessionsAsync 方法旨在用于不频繁调用以帮助调试。由于服务限制,此 API 的会话结果不是实时的,并且在更频繁调用时可能不完整。 若要实现会话浏览功能,请参阅多人游戏会话浏览中的“搜索句柄”部分。若要实现匹配,请参阅使用 SmartMatch 匹配。如果预留或被邀请到会话的玩家未加入该会话,会发生什么情况?
这取决于当玩家收到游戏会话已准备好的通知时,标题是否正在运行。 如果玩家在标题中且不接受来自标题 UI 的游戏会话通知,则标题有责任使用 XblMultiplayerSessionLeave 方法将玩家从游戏会话中移除。 如果标题受限或未运行,shell 会提供一条通知,告知玩家有可用的位置。如果玩家拒绝或忽略系统通知,MPSD 会将该玩家从游戏会话中移除。为什么已创建的会话不会被匹配找到?
在 XBOX One 上,仅创建会话不足以让匹配找到新会话。您必须创建匹配票证以开始向匹配服务通告会话。有关详细信息,请参阅匹配概述。如果游戏会话有开放的玩家位置并支持进行中加入,为什么会话开始后玩家找不到该会话?
游戏会话开始后,它就不会再在匹配服务上通告。如果会话中出现可用的玩家位置,并且仲裁者(主机)希望吸引新玩家,则仲裁者必须通过调用 XblMatchmakingCreateMatchTicketAsync 方法为进行中的会话创建新的匹配票证。该票证会再次通告会话并找到更多玩家。有关详细信息,请参阅匹配概述。如果游戏会话已开放,刚加入游戏的玩家能否直接加入会话并开始游戏,而不必等待预留?
可以。当您的标题使用多个会话来跟踪游戏会话中的玩家子组时,这特别有用。加入的玩家可能会加入代表该玩家组的会话,然后需要加入更大的游戏会话。我的标题中进行大型游戏会话时,为什么并非所有会话成员都能看到游戏邀请通知?
当您的标题通过加入将玩家添加到会话时,标题始终将 XblMultiplayerSessionMember 的InitializeRequested 成员设置为 true。这会告知 MPSD 在将游戏移出初始化阶段之前等待其余会话成员。否则,玩家只有非常短的时间来加入,并且可能错过会话更改的通知。