Skip to main content
PlayFab 匹配提供了进入和离开匹配的简单接口。尽管如此,仍有多个环节可能出错。以下是一些较常见的错误情形,以及游戏应如何处理它们的方式。 本页假定你熟悉 PlayFab 匹配的一般流程。有关更多信息,请参阅我们的匹配快速入门,了解匹配的常见用法。

工单创建时的错误

工单创建可能因多种原因失败。在大多数情况下,PlayFab 错误代码会指出提交请求中存在问题的地方。修正后即可成功提交。
错误 MatchmakingAttributeInvalidMatchmakingPlayerAttributesInvalid 表示属性格式存在问题。有关如何在工单中传递属性的详细信息,请参阅指定工单属性一节。
其他错误代码表明请求有效,但请求以外的情况阻止了工单被接受。具体包括:
  1. MatchmakingRateLimitExceeded - 表示你提交工单过于频繁。有关更多详细信息,请参阅下方章节。
  2. MatchmakingTicketMembershipLimitExceeded - 表示用户已在另一个活跃工单中。用户被限制不能同时在一个队列内的多个工单中,因为他们无法同时进行两场游戏。有关纠正此情况的详细内容,请参阅下方章节。
如果收到 HTTP 错误代码 503,请在短暂延迟后重试你的请求。

调用返回 MatchmakingRateLimitExceeded

与其他 PlayFab 功能类似,PlayFab 匹配会根据 Game Manager 中配置的限制来限制你所进行的调用数量。收到 MatchmakingRateLimitExceeded 错误表明该游戏已超过此调用类型的限制。 在匹配中,这最常发生在轮询 GetMatchmakingTicket 以查看工单是否已匹配时。 为避免此错误,可以增加你的限制,或降低调用频率。
尽管响应的 HTTP 状态代码为 429,但请求本身是有效的,仍可以重试。

创建或加入工单返回 MatchmakingTicketMembershipLimitExceeded

在 PlayFab 匹配中,用户在每个队列中同时只能位于一个工单中,以避免用户进入两场对局并需要决定采纳哪张工单的情况。未被采纳的对局将缺少一名玩家,其玩家可能会被迫重新进入匹配。如果用户已在一张未取消或未匹配的工单中,却尝试创建或加入另一张工单,则会返回错误 MatchmakingTicketMembershipLimitExceeded 然而,有时游戏或服务器可能因崩溃、重启或其他不可预见的错误而丢失对工单的跟踪。发生这种情况时,会留下一张既非用户也非游戏所知的活跃工单。 这个丢失的工单会阻止将来为该用户提交任何工单,直到它过期。如果发生这种情况,有两种可用选项来解决此问题:

选项 1:从匹配中清除工单

取消用户的所有现有工单。调用 CancelAllMatchmakingTicketsForPlayer 可完成此任务。此后,匹配中不再有正在进行的工单,可以创建新工单。

选项 2:找到丢失的工单

找到用户的现有工单并继续使用。调用 ListMatchmakingTicketsForPlayer 会返回该用户作为成员的所有匹配工单 ID。对提供的每个 ticketId 调用 GetMatchmakingTicket 可以检索其状态,并继续监视它直到找到对局。

并非所有玩家都加入了多用户工单

创建多用户工单时,某位受邀玩家可能未能或拒绝加入。在这种情况下,创建的工单将保持在 WaitingForPlayers 状态,直到过期。游戏应预期这种情况偶尔发生,并在 UI 内设置相当短的超时。 超时后,游戏应取消该工单,并检查所有玩家是否仍同意一起玩游戏。

GetMatch 返回未找到

对局创建后,对局会存在一段时间并最终失效。如果没有及时检索对局,这些用户需要重新提交工单才能再次匹配。可以通过确保及时检索对局(即在几分钟内)来避免这种情况。 如果你按此处所述将 Matchmaking 与 Lobby 一同使用,则在对局在此处超时之后,lobbyArrangementString 仍可能在一段时间内有效。请务必在其过期之前检索并使用 GetMatch 中的信息。

工单被取消

工单可能因多种原因被取消。最常见的情形是用户取消和工单过期,但服务器也可能取消工单。如果你调用 GetMatchmakingTicket 并发现你的工单已被取消,原因将列在 CancellationReason 字段中。可能的 CancellationReason 响应及可能的解决方案如下所示。

取消工单返回错误

取消工单不保证成功。虽然大多数错误不言自明,但错误 MatchmakingTicketAlreadyCompleted 表示两种可能情况之一:
  1. 工单已被取消。
  2. 工单已被匹配。
收到此错误时,游戏应调用 GetMatchmakingTicket 来区分这两种情况。在第一种情况下,工单已处于所需状态,无需进一步操作。第二种情况表示用户的取消操作太晚,工单已经匹配。这种在用户取消和找到对局之间的竞态条件不可避免,必须由游戏处理。 对此,游戏有两种解决方案——无视用户的取消请求,无论如何都加入对局;或者允许对局在明知会缺少一名玩家的情况下开始。这两种方案都不完美,但预期这种情况会发生并有意识地为其创建游戏流程非常重要。同样值得注意的是,玩家可能因任何原因不加入对局,因此游戏必须无论此处提到的竞态条件如何都处理这种情况。
最后修改于 2026年8月13日