

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 从后端服务生成手动回填请求
<a name="match-backfill-client"></a>

作为从游戏服务器发送回填请求的替代方案，您可能希望从客户端游戏服务发送这些请求。要使用此选项，客户端服务必须有权访问有关游戏会话活动和玩家连接的最新数据；如果您的游戏使用会话目录服务，这可能是很好的选择。

本主题假定您已构建必需的 FlexMatch 组件并已将对战过程成功地添加到您的游戏服务器和客户端游戏服务。有关设置 FlexMatch 的详细信息，请参阅 [路线图：在 Amazon GameLift Servers 托管解决方案中添加对战](match-tasks.md)。

要为您的游戏启用对战回填，请添加以下功能：
+ 将对战回填请求发送到对战构建器并跟踪请求的状态。
+ 更新游戏会话的对战信息。请参阅 [在游戏服务器上更新对战数据](match-backfill-server-data.md)。

与其他客户端功能一样，客户端游戏服务使用带有 Amazon GameLift Servers API 的 AWS SDK。C\+\+、C\# 和许多其他语言都提供此软件开发工具包。有关客户端的一般描述 APIs，请参阅 Amazon GameLift Servers API 参考，其中描述了用于Amazon GameLift Servers操作的服务 API 以及特定语言的参考指南的链接。

要设置客户端游戏服务以回填对战的游戏，请完成以下任务。

1. **触发回填请求。**通常，每当已对战的游戏具有一个或多个空余玩家位置时游戏都会启动回填请求。您可能希望将回填请求绑定到特定情况，例如填充关键人物角色或平衡团队。您还有可能想要基于游戏会话的时长限制回填。无论您对触发器使用什么，至少您将需要以下信息。您可以通过使用游戏会话 ID 进行调用，从游戏会话[DescribeGameSessions](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeMatchmaking.html)对象 ([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html)) 中获取此信息。
   + *当前空余玩家位置的数量*。此值可通过游戏会话的最大玩家限制和当前玩家数量计算得出。当前玩家数量会在您的游戏服务器每次连接 Amazon GameLift Servers 服务时进行更新以验证新的玩家连接或报告断开连接的玩家。
   + *创建策略*。此设置指示游戏会话当前是否接受新玩家。

    游戏会话对象包含其他可能有用的信息，包括游戏会话开始时间、自定义游戏属性和对战构建器数据。

1. **创建回填请求。**添加代码以创建对战回填请求并将其发送到 FlexMatch 对战构建器。回填请求使用以下客户端 APIs处理：
   + [StartMatchBackfill](https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartMatchBackfill.html)
   + [StopMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_StopMatchmaking.html)

   要创建回填请求，请使用以下信息调用 `StartMatchBackfill`。回填请求类似于对战请求 (请参阅[请求玩家对战](match-client-start.md))，但还识别现有游戏会话。要取消回填请求，请使用回填请求的票证 ID 调用 `StopMatchmaking`。
   + **票证 ID** – 提供对战票证 ID（或者选择自动生成该 ID）。您可以使用相同的机制为配对请求和回填请求分配票证 IDs 。以相同方式处理对战和回填的票证。
   + **对战构建器** – 识别要使用的对战配置的名称。通常，您想要使用与用于创建原始对战的回填的对战构建器相同的构建器。此信息位于配对配置 ARN 下的游戏会话对象 ([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html)) `MatchmakerData` 属性中。名称值是紧接在“matchmakingconfiguration/”之后的字符串。(例如，在 ARN 值“arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MM-4v4”中，对战配置名称为“MM-4v4”。) 
   + **游戏会话 ARN** – 指定要回填的游戏会话。使用游戏会话对象中的 `GameSessionId` 属性；此 ID 使用您所需的 ARN 值。回填请求的配对门票 ([MatchmakingTicket](https://docs.aws.amazon.com/gamelift/latest/apireference/API_MatchmakingTicket.html)) 在处理时具有游戏会话 ID；新配对请求的门票在配对结束之前不会获得游戏会话 ID；游戏会话 ID 的存在是分辨新比赛门票和补填门票之间区别的一种方式。
   + **玩家数据** – 包含您正在回填的游戏会话中所有当前玩家 ([Player](https://docs.aws.amazon.com/gamelift/latest/apireference/API_Player.html)) 的玩家信息。此信息让对战构建器能够为当前游戏会话中的玩家找到可能的最佳玩家匹配。您必须包括每位玩家的团队成员资格。如果您不使用回填，请不要指定团队。如果您的游戏服务器已准确报告玩家连接状态，则您应能够获取此数据，如下所示：

     1. 使用游戏会话 ID 调用 [DescribePlayerSessions()](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribePlayerSessions.html) 以发现当前已连接到游戏会话的所有玩家。每个玩家会话包括一个玩家 ID。您可以添加状态筛选器以仅检索活动的玩家会话。

     1. 从游戏会话对象 ([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html))、`MatchmakerData`属性中提取玩家数据（请参阅[关于对战构建器数据](match-server.md#match-server-data)。使用在上一步中 IDs获取的玩家仅获取当前连接的玩家的数据。由于玩家退出时不会更新对战构建器数据，因此您仅需要提取当前玩家的数据。

     1. 对于玩家延迟，如果对战构建器调用延迟数据，请从所有当前玩家中收集新的延迟值并将其包含在 `Player` 对象中。如果忽略延迟数据而且对战构建器具有延迟规则，则该请求将不会匹配成功。回填请求仅需要游戏会话当前所在的区域的延迟数据。您可以从 `GameSession` 对象的 `GameSessionId` 属性中获取游戏会话的区域；此值是一个 ARN，其中包含了区域。

1. **跟踪回填请求的状态。**添加代码以侦听对战票证状态更新。您可以使用设置的机制利用事件通知 (首选) 或轮询跟踪新对战请求的票证 (请参阅[对战事件](match-client-track.md))。尽管您无需使用回填请求触发玩家接受活动，而且玩家信息已在游戏服务器上更新，但仍需要监控票证状态以处理请求失败和重新提交。

   对战构建器在一个游戏会话中一次只能处理一个对战回填请求。如果您需要取消请求，请调用 [StopMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_StopMatchmaking.html)。如果您需要更改请求，请调用 `StopMatchmaking`，然后提交更新的请求。

   在对战回填请求成功后，您的游戏服务器会收到更新的 `GameSession` 对象并处理将新玩家加入游戏会话中所需的任务。请在[在游戏服务器上更新对战数据](match-backfill-server-data.md)上查看更多信息。