我们强烈建议你考虑使用 Multiplayer SDK,因为它包含实时消息支持,可减少轮询需求,改善匹配体验并降低延迟。使用服务器回填工单 - Multiplayer SDK
- 匹配
- 回填工单彼此之间不能匹配。
- 回填工单在搜索期间被赋予优先级。这可减少玩家群体的碎片化。
- 契约
- 可使用
ServerDetails字段创建回填工单。这允许服务器指示已匹配的玩家应如何连接到该服务器。 - 可使用团队分配创建回填工单。这允许具有团队机制的游戏保持其团队信息。
- 可使用
- 队列属性
- 回填工单不会触发 Multiplayer Server 分配。
- 回填工单不会反映在队列统计信息中,因为其玩家已经在进行游戏,会不准确地影响等待时间。
- 所有权
- 回填工单由游戏服务器所有,而非用户。用户无法以任何方式查看或操作回填工单。
创建服务器回填工单
回填过程的开始与创建常规匹配工单类似,但使用的是 CreateServerBackfillTicket 调用,而不是 CreateServerMatchmakingTicket 调用。游戏服务器必须为其当前托管的游戏提供所有成员信息。最有效的方式是存储先前对局结果中返回的属性。可通过使用ReturnMemberAttributes 标志调用 GetMatch 来检索这些属性。或者,游戏服务器也可以向用户查询属性信息。
除了成员之外,游戏服务器还可以指定另外两条信息。
ServerDetails
此结构与 GetMatch 调用返回的结构相同,允许服务器指定连接到它所需的任何信息。当回填工单被匹配时,其 ServerDetails 结构会返回给对生成对局调用 GetMatch 的任何玩家。此结构中的所有字段都是可选的。游戏可能只需要其中的一部分即可为客户端连接到游戏服务器提供足够的信息。IPV4Address 字段不会被验证,可用于向客户端提供任意的连接字符串信息。团队分配
如果回填工单被提交到具有团队的队列中,每个成员还可以指定一个 TeamId,以指示他们当前所在的团队。当返回对局时,此成员身份将得到保留。如果未为用户指定 TeamId,则可以将其放入任何团队。与回填工单交互
回填工单创建后,便开始搜索满足规则条件的常规匹配工单。回填工单的流程与常规匹配工单的操作方式相同,只是使用相应的 API。游戏服务器可以通过调用 GetServerBackfillTicket 检查其工单的状态。也可以通过调用 CancelServerBackfillTicket 取消工单。客户端不允许取消其所在的回填工单。假设某个客户端处于 4v4 对局中,而对方团队有一名玩家掉线。若允许客户端持续取消其所在的所有回填工单,该客户端便可以维持其优势。为防止这种情况,只有游戏服务器可以取消回填工单。
成员资格限制以及从丢失的回填工单中恢复
与常规匹配工单类似,任何时候用户在每个队列中只能位于一个回填工单中。此限制与客户端控制的常规工单分别跟踪。 如果游戏服务器创建了回填工单然后崩溃,由于成员资格限制,丢失的回填工单中的任何用户都将无法被提交到另一个回填工单中。游戏服务器会通过收到错误MatchmakingTicketMembershipLimitExceeded 以及在 errorDetails 正文中列出哪些用户存在未处理的回填工单来发现这一情况。
