本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 Amazon GameLift 新增至您的遊戲伺服器
本主題說明如何修改您的遊戲伺服器程式碼,以新增程式碼以與 Amazon GameLift 搭配使用。針對您計劃部署到 Amazon GameLift 受管 EC2 機群、受管容器機群或 Anywhere 機群的遊戲伺服器,請使用這些指示。
您的自訂遊戲伺服器必須與 Amazon GameLift 通訊,因為每個遊戲伺服器程序都必須能夠回應 Amazon GameLift 啟動的事件。您的遊戲伺服器也必須讓 Amazon GameLift 隨時掌握伺服器程序狀態和玩家連線。如需有關遊戲伺服器、後端服務、遊戲用戶端和 Amazon GameLift 如何一起運作以管理遊戲託管的詳細資訊,請參閱 與 Amazon 的遊戲用戶端/伺服器互動 GameLift。
若要讓您的遊戲伺服器準備好與 Amazon GameLift 互動,請將 Amazon GameLift Server SDK 新增至您的遊戲伺服器專案,並建置本主題所述的功能。伺服器 SDK 提供多種語言。如需 Amazon GameLift Server SDK 的詳細資訊,請參閱取得 Amazon GameLift 開發工具。
伺服器開發套件 API 參考:
初始化伺服器程序
新增程式碼以與 Amazon GameLift 建立通訊,並報告伺服器程序已準備好託管遊戲工作階段。此程式碼必須在任何 Amazon GameLift 程式碼之前執行。
-
呼叫 來初始化 Amazon GameLift API 用戶端
InitSdk()
。若要初始化在 Amazon GameLift 受管 EC2 執行個體上執行的遊戲伺服器程序,請使用預設InitSDK()
(C++) (C#) (Unreal) (Go) 而不含參數。Amazon GameLift 會自動為您連線至 Amazon GameLift。注意
若要初始化在 Amazon GameLift Anywhere運算資源上執行的遊戲伺服器程序,請
InitSdk()
呼叫ServerParameters
:-
用來連線至遊戲伺服器的 Websocket URL。
-
用於託管遊戲伺服器的程序 ID。
-
託管遊戲伺服器程序的運算 ID。
-
包含 Amazon GameLift Anywhere運算的 GameLift 機群 ID。
-
Amazon GameLift 操作 產生的授權字符
GetComputeAuthToken
。
-
-
通知 Amazon GameLift 伺服器程序已準備好託管遊戲工作階段。呼叫
ProcessReady()
(C++) (C#) (非真實) (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#) (Unreal) (Go) 。
啟動遊戲工作階段
新增程式碼以實作回呼函式 onStartGameSession
。Amazon GameLift 會叫用此回呼,在伺服器上啟動遊戲工作階段。
onStartGameSession
函數會將 GameSession 物件作為輸入參數。此物件包含關鍵遊戲工作階段資訊,例如玩家上限。它也可以包含遊戲資料和玩家資料。函數實作應執行下列任務:
(選用) 驗證新的玩家
如果您要追蹤玩家工作階段的狀態,請新增程式碼,以在新玩家連線到遊戲伺服器時驗證新玩家。Amazon GameLift 會追蹤目前的玩家和可用的遊戲工作階段槽。
為了進行驗證,請求存取遊戲工作階段的遊戲用戶端必須包含玩家工作階段 ID。當玩家要求使用 StartGameSessionPlacement() 或 StartMatchmaking() 加入遊戲時,Amazon GameLift 會自動產生此 ID。然後,玩家工作階段會在遊戲工作階段中保留開放的插槽。
當遊戲伺服器程序收到遊戲用戶端連線請求時,它會呼叫 AcceptPlayerSession()
(C++) (C#) (非真實) (Go) 與玩家工作階段 ID。為了回應,Amazon GameLift 會驗證玩家工作階段 ID 是否對應至遊戲工作階段中預留的開放位置。Amazon GameLift 驗證玩家工作階段 ID 後,伺服器程序會接受連線。然後,玩家可以加入遊戲工作階段。如果 Amazon GameLift 未驗證玩家工作階段 ID,則伺服器程序會拒絕連線。
(選用) 報告玩家工作階段結束
如果您要追蹤玩家工作階段的狀態,請新增程式碼,以在玩家離開遊戲工作階段時通知 Amazon GameLift。伺服器程序偵測捨棄連線時應執行此程式碼。Amazon GameLift 使用此通知來追蹤遊戲工作階段中的目前玩家和可用位置。
若要處理中斷的連線,請在程式碼中,使用對應的玩家工作階段 ID,將呼叫新增至伺服器 API 操作 RemovePlayerSession()
(C++) (C#) (非真實) (Go) 。
結束遊戲工作階段
將程式碼新增至伺服器程序關閉順序,以在遊戲工作階段結束時通知 Amazon GameLift。若要回收和重新整理託管資源,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()
,程序可以安全地關閉。