

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從後端服務產生手動回填請求
<a name="match-backfill-client"></a>

除了從遊戲伺服器傳送回填請求，您可能要從用戶端遊戲服務來傳送他們。若要使用此選項，用戶端服務必須能夠存取遊戲工作階段活動和玩家連線上的目前資料；如果您的遊戲使用工作階段目錄服務，這可能會是最佳選擇。

本主題假設您已成功建置必要的 FlexMatch 元件並成功將配對建構程序新增至遊戲伺服器和用戶端遊戲服務。如需設定 FlexMatch 的詳細資訊，請參閱 [路線圖：將配對新增至Amazon GameLift Servers託管解決方案](match-tasks.md)。

若要為遊戲啟用配對回填，新增以下功能：
+ 請將配對建構回填請求傳送到配對建構器來追蹤請求的狀態。
+ 更新遊戲工作階段的配對資訊。請參閱 [更新遊戲伺服器上的配對資料](match-backfill-server-data.md)

如同其他用戶端功能，用戶端遊戲服務會使用 AWS SDK 搭配 Amazon GameLift Servers API。SDK 有 C\+\+、C\# 及多種其他語言的選擇。如需用戶端 APIs 的一般說明，請參閱 Amazon GameLift Servers API 參考，其中說明 Amazon GameLift Servers動作的服務 API 和語言特定參考指南的連結。

若要設定用戶端遊戲服務，以回填配對遊戲，請完成以下任務。

1. **觸發回填請求。**一般而言，當配對的遊戲有一或多個玩家空位時，遊戲會初始化回填請求。建議您將回填請求連繫至特定的情況 (例如填入關鍵字元角色或平衡團隊)。您可能還想要根據遊戲工作階段的存留期動限制回填。無論您用於觸發的條件為何，至少您會需要下列資訊。您可以透過呼叫含遊戲工作階段 ID 的 [DescribeGameSessions](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html) 來從遊戲工作階段物件 ([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeMatchmaking.html)) 取得此資訊。
   + *目前玩家空位數*。您可以從遊戲工作階段玩家上限和目前玩家數目來計算此值。每當遊戲伺服器聯絡 Amazon GameLift Servers 服務來驗證新玩家連線或報告捨棄的玩家時，即會更新目前玩家數目。
   + *建立政策*。此設定表示遊戲工作階段目前是否接受新玩家。

    遊戲工作階段物件包含其他可能有用的資訊 (包括遊戲工作階段開始時間、自訂遊戲屬性和配對建構器資料)。

1. **建立回填請求。**您能夠新增程式碼以建立配對回填請求，並將其傳送至 FlexMatch 配對建構器。使用這些用戶端 API 處理回填請求：
   + [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 指派到配對建構和回填請求。會以相同的方式處理配對建構和回填的票證。
   + **配對建構器** — 識別要使用的配對組態名稱。一般而言，您將想要使用用於建立原始配對之回填的相同配對建構器。此資訊會在配對建構組態 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)) 提取玩家資料。使用在之前步驟中取得的玩家 ID，以僅取得目前連線玩家的資料。由於在玩家中途退出時資料建構器資料不會更新，您只需要為目前的玩家擷取資料。

     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) 了解更多資訊。