選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

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

焦點模式
Amazon GameLift Servers 新增至您的遊戲伺服器 - Amazon GameLift Servers

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

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

本主題說明如何修改遊戲伺服器程式碼,讓遊戲伺服器程序可以與服務通訊Amazon GameLift Servers。對於您計劃部署到Amazon GameLift Servers受管 EC2 機群、受管容器機群或 Anywhere 機群的遊戲伺服器,請使用這些指示。

遊戲伺服器程序會與服務通訊Amazon GameLift Servers,以接收來自服務的指示,並報告伺服器程序運作狀態和遊戲工作階段狀態。如需遊戲託管解決方案元件 (遊戲伺服器、後端服務、遊戲用戶端和 Amazon GameLift Servers) 之間互動的詳細資訊,請參閱 遊戲用戶端/伺服器與 的互動 Amazon GameLift Servers

若要準備您的遊戲進行託管,請將適用於 的伺服器 SDK Amazon GameLift Servers 新增至您的遊戲伺服器專案。如果您使用的是 Unreal Engine 或 Unity 的Amazon GameLift Servers外掛程式,則伺服器 SDK 已內建並可供使用。伺服器 SDK 提供多種語言。如需遊戲伺服器工具支援的詳細資訊,包括伺服器 SDK,請參閱 取得Amazon GameLift Servers開發工具

伺服器開發套件 API 參考:

初始化伺服器程序

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

  1. 呼叫 來初始化 Amazon GameLift Servers API 用戶端InitSdk()。如果您要準備在Amazon GameLift Servers受管 EC2 機群上執行遊戲伺服器,請使用預設 InitSDK()(C++) (C#) (Unreal) (Go) 而無參數。API 用戶端會為您處理 Amazon GameLift Servers服務的連線。

    如果您要準備遊戲伺服器以用於 Amazon GameLift ServersAnywhere 機群:

    InitSdk() 使用下列 呼叫 來初始化 Amazon GameLift Servers API 用戶端ServerParameters

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

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

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

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

    • Amazon GameLift Servers 操作 產生的授權字符GetComputeAuthToken

  2. 通知服務遊戲伺服器程序已準備好託管遊戲工作階段。使用下列 呼叫 ProcessReady()(C++) (C#) (Unreal) (Go) ProcessParameters。每個遊戲伺服器程序ProcessReady()只能呼叫一次。

    • 伺服器程序的連接埠號碼。當伺服器程序啟動遊戲工作階段時,它會提供 Amazon GameLift Servers服務的連接埠,以更新遊戲工作階段資訊。您的遊戲可以擷取此資訊,並將其提供給遊戲用戶端,以用來連線至伺服器程序並加入遊戲工作階段。

    • Amazon GameLift Servers 您要為您存放的檔案位置。這些可能包括遊戲工作階段日誌,以及伺服器程序在遊戲工作階段期間產生的其他檔案。雖然 會將這些檔案暫時Amazon GameLift Servers儲存在執行伺服器程序的運算上,但這些檔案只能在執行個體關閉之前使用。您可以透過 Amazon GameLift Servers 主控台或呼叫 Amazon GameLift Servers API 操作 GetGameSessionLogUrl() 來存取儲存的檔案。

      如果您要準備遊戲伺服器以用於 Amazon GameLift Servers受管容器機群:

      您不需要指定容器機群的日誌參數。反之,請將遊戲工作階段和其他日誌資料傳送至標準輸出。容器機群會自動將所有容器標準輸出擷取為日誌串流。

    • 下列回呼函數Amazon GameLift Servers允許 傳送訊息或提示至遊戲伺服器程序。您必須在遊戲伺服器程式碼中實作這些函數。如需詳細資訊,請參閱 ProcessParameters(C++) (C#) (Unreal) (Go)

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

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

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

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

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

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

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

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

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

  • 傳回布林值:正常為 true,不良為 false。

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

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

(選用) 取得 TLS 憑證

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

開始遊戲工作階段

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

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

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

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

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

(選用) 驗證新玩家

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

為了進行驗證,嘗試加入遊戲工作階段的遊戲用戶端必須包含玩家工作階段 ID。當您的遊戲啟動新的遊戲工作階段時, 會透過呼叫 StartGameSessionPlacement()StartMatchmaking() 來Amazon GameLift Servers產生此 ID。在這些請求上,遊戲工作階段中的開放位置會保留給玩家工作階段。

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

(選用) 報告玩家工作階段結束

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

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

結束遊戲工作階段

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

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

回應伺服器程序關閉通知

新增程式碼以關閉伺服器程序,以回應來自 Amazon GameLift Servers服務的通知。當伺服器程序持續回報運作狀態不佳,或正在終止伺服器程序的執行個體時,服務會傳送此通知。 Amazon GameLift Servers可以在容量縮減事件中停止執行個體,或回應 Spot 執行個體中斷。Spot 執行個體中斷提供兩分鐘的通知,讓伺服器有時間正常中斷與玩家的連線、保留遊戲狀態資料,以及執行其他清除任務。

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

  • 實作回呼函數 onProcessTerminate()(C++) (C#) (Unreal) (Go) 。此函數應呼叫關閉伺服器程序的程式碼。

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

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

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。