

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

# 从游戏服务器生成手动回填请求


您可以从托管游戏会话的游戏服务器进程手动发出对战回填请求。服务器进程包含 up-to-date有关连接到游戏的玩家以及空置玩家插槽状态的最多信息。

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

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

与其他服务器功能一样，游戏服务器使用 Amazon GameLift Servers 服务器软件开发工具包。此软件开发工具包在 C\$1\$1 和 C\$1 中可用。

要从您的游戏服务器提出对战回填请求，请完成以下任务。

1. **触发对战回填请求。**通常，每当已对战的游戏具有一个或多个空余玩家位置时，您就会想要发出回填请求。您可能希望将回填请求绑定到特定情况，例如填充关键人物角色或平衡团队。您还有可能想要基于游戏会话的时长限制回填活动。

1. **创建回填请求。**添加代码以创建对战回填请求并将其发送到 FlexMatch 对战构建器。回填请求使用以下服务器 APIs处理：
   + [ StartMatchBackfill()](https://docs.amazonaws.cn/gamelift/latest/developerguide/integration-server-sdk-cpp-ref-actions.html#integration-server-sdk-cpp-ref-startmatchbackfill)
   + [ StopMatchBackfill()](https://docs.amazonaws.cn/gamelift/latest/developerguide/integration-server-sdk-cpp-ref-actions.html#integration-server-sdk-cpp-ref-stopmatchbackfill)

   要创建回填请求，请使用以下信息调用 `StartMatchBackfill`。要取消回填请求，请使用回填请求的票证 ID 调用 `StopMatchBackfill`。
   + **票证 ID** – 提供对战票证 ID（或者选择自动生成该 ID）。您可以使用相同的机制为配对请求和回填请求分配票证 IDs 。以相同方式处理对战和回填的票证。
   + **对战构建器** – 确定要用于回填请求的对战构建器。通常，您想要使用与用于创建原始对战的对战构建器相同的构建器。此请求需要对战配置 ARN。此信息存储在游戏会话对象 ([GameSession](https://docs.amazonaws.cn/gamelift/latest/apireference/API_GameSession.html)) 中，该对象是在激活游戏会话Amazon GameLift Servers时提供给服务器进程的。对战配置 ARN 包含在 `MatchmakerData` 属性中。
   + **游戏会话 ARN** – 确定要回填的游戏会话。你可以通过调用服务器 API [ GetGameSessionId()](https://docs.amazonaws.cn/gamelift/latest/developerguide/integration-server-sdk-cpp-ref-actions.html#integration-server-sdk-cpp-ref-getgamesessionid) 来获取游戏会话 ARN。对战过程期间，新请求的票证不具有游戏会话 ID，而回填请求的票证则具有。提供游戏会话 ID 是用于区分新对战票证和回填票证的一种方式。
   + **玩家数据** – 包含您正在回填的游戏会话中所有当前玩家 ([Player](https://docs.amazonaws.cn/gamelift/latest/apireference/API_Player.html)) 的玩家信息。此信息让对战构建器能够为当前游戏会话中的玩家找到可能的最佳玩家匹配。您必须包括每位玩家的团队成员资格。如果您不使用回填，请不要指定团队。如果您的游戏服务器已准确报告玩家连接状态，则您应能够获取此数据，如下所示：

     1. 托管游戏会话的服务器进程应包含最多的玩家当前连接到游戏会话 up-to-date的信息。

     1. 要获取玩家 IDs、属性和队伍分配，请从游戏会话对象 ([GameSession](https://docs.amazonaws.cn/gamelift/latest/apireference/API_GameSession.html))、`MatchmakerData`属性中提取玩家数据（参见[关于对战构建器数据](match-server.md#match-server-data)）。对战构建器数据包含已与游戏会话匹配的所有玩家，因此您将需要提取仅当前连接的玩家的玩家数据。

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

1. **跟踪回填请求的状态。**Amazon GameLift Servers 使用服务器开发工具包回调函数 `onUpdateGameSession` 针对回填请求的状态更新您的游戏服务器（请参阅[初始化服务器进程](https://docs.amazonaws.cn/gamelift/latest/developerguide/gamelift-sdk-server-api.html#gamelift-sdk-server-initialize)）。添加代码以在[在游戏服务器上更新对战数据](match-backfill-server-data.md)中处理状态消息（以及由于回填请求成功更新的游戏会话对象）。

   对战构建器在一个游戏会话中一次只能处理一个对战回填请求。如果您需要取消请求，请致电 [ StopMatchBackfill()](https://docs.amazonaws.cn/gamelift/latest/developerguide/integration-server-sdk-cpp-ref-actions.html#integration-server-sdk-cpp-ref-stopmatchbackfill)。如果您需要更改请求，请调用 `StopMatchBackfill`，然后提交更新的请求。