

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

# 遊戲用戶端/伺服器與 的互動 Amazon GameLift Servers
<a name="gamelift-sdk-interactions"></a>

Amazon GameLift Servers 託管解決方案中的元件會以特定方式彼此互動，以執行遊戲工作階段來回應玩家需求。本主題說明當您的遊戲伺服器託管在Amazon GameLift Servers受管 EC2 機群、自我管理Amazon GameLift Servers的 Anywhere 機群或混合解決方案時，元件如何彼此通訊。

託管解決方案元件包括遊戲伺服器、 Amazon GameLift Servers服務、用戶端後端服務和遊戲用戶端。遊戲伺服器使用[Amazon GameLift Servers伺服器 SDK](reference-serversdk.md) 與服務互動Amazon GameLift Servers。後端服務使用 [Amazon GameLift Servers服務 API](reference-awssdk.md) （軟體 AWS 開發套件的一部分） 代表遊戲用戶端與 服務互動。加入遊戲工作階段時，遊戲用戶端會使用遊戲工作階段的唯一 IP 地址和連接埠號碼，直接連線至遊戲工作階段。

**Topics**
+ [

## 互動圖表
](#gamelift-sdk-interactions-diagram)
+ [

## 互動行為
](#gamelift-sdk-interactions-descriptions)

## 互動圖表
<a name="gamelift-sdk-interactions-diagram"></a>

下圖說明您的遊戲託管元件如何互動，以便Amazon GameLift Servers服務可以追蹤遊戲伺服器可用性的狀態，並開始遊戲工作階段以回應玩家需求。

![\[金鑰互動的遊戲用戶端/伺服器行為，如本主題所述。\]](http://docs.aws.amazon.com/zh_tw/gameliftservers/latest/developerguide/images/combined_api_interactions_vsd.png)


## 互動行為
<a name="gamelift-sdk-interactions-descriptions"></a>

下列各節說明每個關鍵互動中的事件順序。

### 初始化遊戲伺服器程序
<a name="gamelift-sdk-interactions-launch"></a>

啟動時，遊戲伺服器程序會建立與服務的通訊，Amazon GameLift Servers並回報其狀態為準備好託管遊戲工作階段。

1. 遊戲伺服器可執行檔的新程序會開始在託管資源上執行。

1. 遊戲伺服器程序會依序呼叫下列伺服器 SDK 操作：

   1. `InitSDK()` 初始化伺服器 SDK、驗證伺服器程序，以及建立與服務的通訊Amazon GameLift Servers。

   1. `ProcessReady()` 以傳達託管遊戲工作階段的準備程度。此呼叫也會報告程序的連線資訊、遊戲用戶端用來連線至遊戲工作階段的哪些資訊，以及其他資訊。

   伺服器程序接著會等待來自 Amazon GameLift Servers服務的提示。

1. Amazon GameLift Servers 會將伺服器程序的狀態更新為 ，`ACTIVE`並可用於託管新的遊戲工作階段。

1. Amazon GameLift Servers 會開始定期呼叫回`onHealthCheck`呼，向伺服器程序請求運作狀態。這些呼叫會在伺服器程序保持作用中狀態時繼續。伺服器程序必須在一分鐘內回應正常或不良。如果伺服器程序回應狀況不良或沒有回應，Amazon GameLift Servers服務會在某個時間點變更伺服器程序的作用中狀態，並停止傳送啟動遊戲工作階段的請求。

### 建立遊戲工作階段
<a name="gamelift-sdk-interactions-start"></a>

Amazon GameLift Servers 服務會啟動新的遊戲工作階段，以回應來自玩家的遊戲請求。

1. 使用遊戲用戶端的玩家要求加入遊戲工作階段。根據您的遊戲如何處理玩家聯結程序，遊戲用戶端會將請求傳送至後端服務。

1. 如果玩家加入程序需要啟動新的遊戲工作階段，後端服務會將新遊戲工作階段的請求傳送至Amazon GameLift Servers服務。此請求會呼叫服務 API 操作 `StartGameSessionPlacement()`。（或者，後端服務可能會呼叫 `StartMatchmaking()`、 或 `CreateGameSession()`。)

1. Amazon GameLift Servers 服務會透過建立狀態為 的新`GameSessionPlacement`票證來回應`PENDING`。它會將票證資訊傳回至後端服務，以便追蹤置放票證狀態，並判斷遊戲工作階段何時準備好供玩家使用。如需詳細資訊，請參閱[設定遊戲工作階段放置的事件通知](queue-notification.md)。

1. Amazon GameLift Servers 服務會啟動遊戲工作階段置放程序。它會識別要查看哪些機群，並搜尋這些機群是否有未託管遊戲工作階段的作用中伺服器程序。在尋找可用的伺服器程序時，Amazon GameLift Servers服務會執行下列動作：

   1. 使用遊戲工作階段設定和置放請求中的玩家資料建立`GameSession`物件，並將狀態設定為 `ACTIVATING`。

   1. 提示伺服器程序啟動遊戲工作階段。服務會叫用伺服器程序的回`onStartGameSession`呼並傳遞 `GameSession` 物件。

   1. 將伺服器程序的遊戲工作階段數目變更為 `1`。

1. 伺服器程序會執行其回`onStartGameSession`呼函數。當伺服器程序準備好接受玩家連線時，它會呼叫伺服器 SDK 操作`ActivateGameSession()`並等待玩家連線。

1. Amazon GameLift Servers 服務會使用伺服器程序的連線資訊 （如呼叫 中所回報`ProcessReady()`) 更新`GameSession`物件，並將遊戲工作階段狀態設定為 `ACTIVE`。它也會將`GameSessionPlacement`票證狀態更新為 `FULFILLED`。

1. 後端服務會呼叫 `DescribeGameSessionPlacement()`來檢查票證狀態並取得遊戲工作階段資訊。當遊戲工作階段處於作用中狀態時，後端服務會通知遊戲用戶端並傳遞遊戲工作階段連線資訊。

1. 遊戲用戶端會使用連線資訊直接連線至遊戲伺服器程序，並加入遊戲工作階段。

### 將玩家新增至遊戲
<a name="gamelift-sdk-interactions-add-player"></a>

遊戲可以選擇使用玩家工作階段來追蹤玩家與遊戲工作階段的連線。玩家工作階段可以個別建立，也可以作為遊戲工作階段置放請求的一部分建立。

1. 後端服務會使用遊戲工作階段 ID `CreatePlayerSession()` 呼叫服務 API 操作。

1. Amazon GameLift Servers 服務會檢查遊戲工作階段狀態 （必須為 `ACTIVE`)，並在遊戲工作階段中尋找開啟的玩家位置。如果插槽可用，則服務會執行下列動作：

   1. 建立新的`PlayerSession`物件，並將狀態設定為 `RESERVED`。

   1. 使用玩家工作階段資訊回應後端服務請求。

1. 後端服務會將玩家工作階段資訊與遊戲工作階段連線資訊一起傳遞給遊戲用戶端。

1. 遊戲用戶端使用連線資訊和玩家工作階段 ID 直接連線至遊戲伺服器程序，並要求 加入遊戲工作階段。

1. 為了回應遊戲用戶端加入嘗試，遊戲伺服器程序會呼叫服務 API 操作`AcceptPlayerSession()`來驗證玩家工作階段 ID。伺服器程序接受或拒絕連接。

1. Amazon GameLift Servers 服務會執行下列其中一項操作：

   1. 如果連線被接受，則 會將`PlayerSession`狀態Amazon GameLift Servers設定為 `ACTIVE`，並將 傳遞`PlayerSession`至遊戲伺服器程序。

   1. 如果遊戲伺服器程序未在原始`CreatePlayerSession()`請求後的特定期間內`AcceptPlayerSession()`呼叫玩家工作階段 ID，Amazon GameLift Servers服務會將`PlayerSession`狀態變更為 ，`TIMEDOUT`並在遊戲工作階段中重新開啟玩家位置。

### 移除玩家
<a name="gamelift-sdk-interactions-remove-player"></a>

對於使用玩家工作階段的遊戲，遊戲伺服器程序會在玩家中斷連線時通知Amazon GameLift Servers服務。服務會使用此資訊來追蹤遊戲工作階段中玩家位置的狀態，並允許新玩家使用開放的插槽。

1. 玩家與遊戲工作階段中斷連線。

1. 遊戲伺服器程序會偵測遺失的連線，並呼叫伺服器 SDK 操作 `RemovePlayerSession()`。

1. Amazon GameLift Servers 服務會將玩家工作階段狀態變更為 ，`COMPLETED`並在遊戲工作階段中重新開啟玩家位置。

### 關閉遊戲工作階段
<a name="gamelift-sdk-interactions-shutdown"></a>

在遊戲工作階段結束時，或關閉遊戲工作階段時，伺服器程序會通知遊戲工作階段狀態Amazon GameLift Servers的服務。

1. 遊戲伺服器程序會結束遊戲工作階段，並透過呼叫伺服器 SDK 操作 來啟動程序關閉`ProcessEnding()`。

1. 遊戲伺服器程序會呼叫 `Destroy()` 從記憶體釋放伺服器 SDK。[遙測指標](monitoring-gamelift-servers-metrics.md)需要此步驟，以防止其在當機時報告正常程序結束。

1. Amazon GameLift Servers 服務會執行下列動作：

   1. 將遊戲工作階段日誌上傳至 Amazon Simple Storage Service (Amazon S3)。

   1. 將遊戲工作階段狀態變更為 `TERMINATED`。

   1. 將伺服器程序狀態變更為 `TERMINATED`。

   1. 根據託管解決方案的設計方式，新可用的託管資源會配置為執行新的遊戲伺服器程序。