將 Amazon GameLift 新增至您的遊戲伺服器 - Amazon GameLift

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

將 Amazon GameLift 新增至您的遊戲伺服器

您的自訂遊戲伺服器必須與 Amazon 通訊 GameLift,因為每個遊戲伺服器程序都必須能夠回應 Amazon GameLift 啟動的事件。您的遊戲伺服器也必須隨時通知 Amazon GameLift 伺服器程序狀態和玩家連線。如需有關遊戲伺服器、後端服務、遊戲用戶端和 Amazon 如何共同 GameLift 管理遊戲託管的詳細資訊,請參閱 與 Amazon 的遊戲用戶端/伺服器互動 GameLift

若要讓您的遊戲伺服器準備好與 Amazon 互動 GameLift,請將 Amazon GameLift Server 新增至SDK您的遊戲伺服器專案,並建置本主題所述的功能。伺服器SDK提供多種語言版本。如需 Amazon GameLift Server 的詳細資訊SDK,請參閱 取得 Amazon GameLift 開發工具

伺服器SDKAPI參考:

初始化伺服器程序

新增程式碼以與 Amazon 建立通訊, GameLift 並報告伺服器程序已準備好託管遊戲工作階段。此程式碼必須在任何 Amazon GameLift 程式碼之前執行。

  1. 呼叫 初始化 Amazon GameLift API 用戶端InitSdk()。若要初始化在 Amazon GameLift 受管EC2執行個體上執行的遊戲伺服器程序,請使用預設 InitSDK()C++) (C#) (Unreal ) (Go 而不使用參數。Amazon GameLift 會自動 GameLift 為您連線至 Amazon。初始化在 Amazon 上執行的遊戲伺服器程序 GameLift Anywhere 運算資源,InitSdk()使用下列 呼叫 ServerParameters

    • 用於連線至遊戲伺服器的 Websocket URL的 。

    • 用於託管遊戲伺服器的程序 ID。

    • 託管遊戲伺服器程序的運算 ID。

    • 包含 Amazon 的 GameLift 機群 ID GameLift Anywhere 運算。

    • Amazon GameLift 操作 產生的授權權杖GetComputeAuthToken

  2. 通知 Amazon GameLift 伺服器程序已準備好託管遊戲工作階段。呼叫 ProcessReady() C++) (C#) (Unreal ) (Go 並提供下列資訊。(請注意,每個伺服器程序ProcessReady()只能呼叫一次)。

    • 伺服器程序使用的連接埠號碼。後端服務會提供連接埠號碼和 IP 地址給遊戲用戶端,以連線至伺服器程序並加入遊戲工作階段。

    • 您希望 Amazon GameLift 保留的檔案位置,例如遊戲工作階段日誌。伺服器程序會在遊戲工作階段期間產生這些檔案。它們暫時存放在執行伺服器程序的執行個體上,並在執行個體關閉時遺失。您列出的任何檔案都會上傳至 Amazon GameLift。您可以透過 Amazon GameLift 主控台或呼叫 Amazon GameLift API 操作 GetGameSessionLogUrl() 來存取這些檔案。

    • Amazon GameLift 可呼叫伺服器程序的回呼函數名稱。您的遊戲伺服器必須實作這些函數。如需詳細資訊,請參閱 C++) (C#) (Unreal ) (Go

      • (選用) onHealthCheck – Amazon 會定期 GameLift 呼叫此函數,向伺服器請求運作狀態報告。

      • onStartGameSession – Amazon GameLift 呼叫此函數以回應用戶端請求 CreateGameSession()

      • onProcessTerminate – Amazon GameLift 強制停止伺服器程序,讓其正常關閉。

      • (選用) onUpdateGameSession – Amazon GameLift 會將更新的遊戲工作階段物件交付至遊戲伺服器,或提供相符回填請求的狀態更新。FlexMatch 回填功能需要此回呼。

    您也可以設定遊戲伺服器,以安全地存取您擁有或控制 AWS 的資源。如需詳細資訊,請參閱與機群中的其他 AWS 資源通訊

(選用) 報告伺服器程序運作狀態

將程式碼新增至您的遊戲伺服器,以實作回呼函數 onHealthCheck()。Amazon 會定期 GameLift 叫用此回呼方法,以收集運作狀態指標。若要實作此回呼函數,請執行下列動作:

  • 評估伺服器程序的運作狀態。例如,如果任何外部相依性失敗,您可以將伺服器程序報告為運作狀態不佳。

  • 完成運作狀態評估和在 60 秒內回應回呼。如果 Amazon 在此期間 GameLift 未收到回應,會自動將伺服器程序視為運作狀態不佳。

  • 傳回布林值:對於運作狀態良好為 true,對於運作狀態不佳為 false。

如果您未實作運作狀態檢查回呼,則除非伺服器沒有回應,否則 Amazon 會將伺服器程序 GameLift 視為運作狀態良好。

Amazon GameLift 使用伺服器程序運作狀態來終止運作狀態不佳的程序,並清除資源。如果伺服器程序持續回報為運作狀態不佳,或連續三次未回應運作狀態檢查,則 Amazon GameLift 可能會關閉程序並啟動新的程序。Amazon 會在機群的伺服器程序運作狀態上 GameLift 收集指標。

(選用) 取得TLS憑證

如果伺服器程序在已啟用TLS憑證產生功能的機群上執行,則您可以擷取TLS憑證,以與遊戲用戶端建立安全連線,並加密用戶端伺服器通訊。憑證的副本會存放在執行個體上。若要取得檔案位置,請呼叫 GetComputeCertificate()C++) (C#(非真實 ) (Go

開始遊戲工作階段

新增程式碼以實作回呼函式 onStartGameSession。Amazon GameLift 會叫用此回呼,在伺服器上啟動遊戲工作階段。

onStartGameSession 函數會將GameSession物件作為輸入參數。此物件包含金鑰遊戲工作階段資訊,例如玩家數量上限。它也可以包含遊戲資料和玩家資料。函數實作應執行下列任務:

  • 啟動動作以根據 GameSession 屬性建立新的遊戲工作階段。遊戲伺服器至少必須關聯遊戲工作階段 ID,該 ID 是遊戲用戶端在連線至伺服器程序時參考的 ID。

  • 視需要處理遊戲資料和玩家資料。此資料位於 GameSession 物件中。

  • 當新的遊戲工作階段準備好接受玩家 GameLift 時,請通知 Amazon。呼叫伺服器API操作 ActivateGameSession()C++) (C#) (Unreal ) (Go 。為了回應成功的呼叫,Amazon 會將遊戲工作階段狀態 GameLift 變更為 ACTIVE

(選用) 驗證新的播放器

如果您正在追蹤玩家工作階段的狀態,請新增程式碼,以便在新玩家連線到遊戲伺服器時驗證新玩家。Amazon 會 GameLift 追蹤目前的玩家和可用的遊戲工作階段插槽。

為了進行驗證,請求存取遊戲工作階段的遊戲用戶端必須包含玩家工作階段 ID。當玩家要求使用 StartGameSessionPlacement()StartMatchmaking() 加入遊戲時,Amazon GameLift 會自動產生此 ID。然後,玩家工作階段會在遊戲工作階段中保留開啟的插槽。

當遊戲伺服器程序收到遊戲用戶端連線請求時,它會呼叫 AcceptPlayerSession()C++) (C#) (Unreal ) (Go 與播放器工作階段 ID。為了回應,Amazon 會 GameLift 驗證播放器工作階段 ID 是否對應遊戲工作階段中預留的開放插槽。在 Amazon GameLift 驗證播放器工作階段 ID 之後,伺服器程序接受連線。然後,玩家可以加入遊戲工作階段。如果 Amazon GameLift 未驗證播放器工作階段 ID,則伺服器程序會拒絕連線。

(選用) 報告播放器工作階段結束

如果您要追蹤玩家工作階段的狀態,請新增程式碼,以在玩家離開遊戲工作階段 GameLift 時通知 Amazon。伺服器程序偵測捨棄連線時應執行此程式碼。Amazon GameLift 使用此通知來追蹤遊戲工作階段中的目前玩家和可用插槽。

若要處理中斷的連線,請在程式碼中,使用對應的播放器工作階段 ID,將呼叫新增至伺服器API操作 RemovePlayerSession()C++) (C#(非真實 ) (Go

結束遊戲工作階段

將程式碼新增至伺服器程序關閉順序,以在 GameLift 遊戲工作階段結束時通知 Amazon。若要回收和重新整理託管資源,Amazon 會在遊戲工作階段完成後 GameLift 關閉伺服器程序。

在伺服器程序關閉碼開始時,呼叫伺服器API操作 ProcessEnding()C++) (C#(非真實 ) (Go g 。此呼叫會通知 Amazon GameLift 伺服器程序正在關閉。Amazon GameLift 會將遊戲工作階段狀態和伺服器程序狀態變更為 TERMINATED。呼叫 後ProcessEnding(),程序可以安全地關閉。

回應伺服器程序關閉通知

新增程式碼以關閉伺服器程序,以回應來自 Amazon 的通知 GameLift。當伺服器程序持續回報運作狀態不佳,或伺服器程序執行的執行個體終止時,Amazon 會 GameLift 傳送此通知。Amazon GameLift 可以停止執行個體作為容量縮減事件的一部分,或回應 Spot 執行個體中斷。

若要處理關機通知,請對遊戲伺服器程式碼進行下列變更:

  • 實作回呼函式 onProcessTerminate()。此功能應呼叫關閉伺服器程序的程式碼。當 Amazon GameLift 調用此操作時,Spot 執行個體中斷會提供兩分鐘的通知。此通知為伺服器提供時間,以正常中斷播放器連線、保留遊戲狀態資料,以及執行其他清除任務。

  • 從您的遊戲伺服器關閉碼呼叫伺服器API操作 GetTerminationTime()C++) (C#) (Unreal ) (Go 。如果 Amazon GameLift 已發出停止伺服器程序的呼叫,則 會GetTerminationTime()傳回預估的終止時間。

  • 在遊戲伺服器關閉碼開始時,呼叫伺服器API操作 ProcessEnding()C++) (C#(非真實 ) (Go 。此呼叫會通知 Amazon GameLift 伺服器程序正在關閉,然後 Amazon GameLift 會將伺服器程序狀態變更為 TERMINATED。呼叫 後ProcessEnding(),程序可以安全地關閉。