本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 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 程式碼之前執行。
-
呼叫 初始化 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
。
-
-
通知 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物件作為輸入參數。此物件包含金鑰遊戲工作階段資訊,例如玩家數量上限。它也可以包含遊戲資料和玩家資料。函數實作應執行下列任務:
(選用) 驗證新的播放器
如果您正在追蹤玩家工作階段的狀態,請新增程式碼,以便在新玩家連線到遊戲伺服器時驗證新玩家。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()
,程序可以安全地關閉。