使用 Amazon GameLift 本地測試您的整合 - Amazon GameLift

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

使用 Amazon GameLift 本地測試您的整合

注意

本主題僅涵蓋與 Amazon GameLift 伺服器 SDK 4.x 版或更早版本整合的遊戲測試。您的伺服器 SDK 套件包含相容版本的 Amazon 本機版 GameLift 本。如果您使用的是伺服器 SDK 版本 5.x,請參閱使使用 Amazon 設置本地測試 GameLift Anywhere用 Amazon GameLift Anywhere 叢集進行本機測試。

使用 Amazon GameLift 本機在本機裝置上執行受管 Amazon GameLift 服務的限制版本,並測試您的遊戲整合。此工具在對遊戲整合進行重複性開發時非常有用。另一種方式 — 將每個新組建上傳到 Amazon GameLift 並設定叢集來託管您的遊戲 — 每次可能需要幾次或更多時間。

使用 Amazon GameLift 本地,您可以驗證以下內容:

  • 您的遊戲伺服器已與 Server SDK 正確整合,並與 Amazon GameLift 服務正確通訊,以開始新的遊戲工作階段、接受新玩家,以及報告健康狀態和狀態。

  • 您的遊戲用戶端已與適用於 Amazon 的 AWS SDK 正確整合, GameLift 並能擷取現有遊戲工作階段的相關資訊、開始新的遊戲工作階段、加入玩家參與遊戲,以及連線到遊戲工作階段。

Amazon 本 GameLift 地是一種命令列工具,可啟動受管 Amazon GameLift 服務的獨立版本。Amazon L GameLift ocal 也提供執行中的事件日誌,其中包含伺服器處理序初始化、運作狀態檢查以及 API 呼叫和回應。Amazon GameLift 本地識別 Amazon 的 AWS SDK 操作的一個子集 GameLift。您可以從遊戲用戶端 AWS CLI 或從遊戲用戶端撥打電話。所有 API 動作都會在本機執行,就像在 Amazon GameLift Web 服務中一樣。

每個服務器進程只能託管一個遊戲會話。遊戲工作階段是您用來連線到 Amazon GameLift 本地端的可執行檔。遊戲會話完成後,您應該調用GameLiftServerSDK::ProcessEnding然後退出該過程。使用 Amazon GameLift 本機進行本機測試時,您可以啟動多個伺服器程序。每個過程都將連接到 Amazon GameLift 本地。然後,您可以為每個服務器進程創建一個遊戲會話。當遊戲工作階段結束時,您的遊戲伺服器程序應該會結束。然後您必須手動啟動另一個伺服器處理序。

Amazon GameLift 本地支持以下 API:

  • CreateGameSession

  • CreatePlayerSession

  • CreatePlayerSessions

  • DescribeGameSessions

  • DescribePlayerSessions

設置 Amazon GameLift 本地

Amazon GameLift 本地作為與服務器 SDK 捆綁在一起的可執行.jar文件提供。它可以在 Windows 或 Linux 上運行,並與任何 Amazon GameLift 支持的語言一起使用。

執行 Local 之前,您必須同時安裝下列項目。

  • Amazon GameLift 服務器開發套件 3.1.5 到 4.x 版的構建。

  • Java 8

測試遊戲伺服器

如果您只想測試遊戲伺服器,可以使用模擬遊戲 AWS CLI 用戶端對 Amazon GameLift 本地服務的呼叫。這會驗證您的遊戲伺服器是否依下列操作執行:

  • 遊戲伺服器會正確啟動並初始化 Amazon GameLift 伺服器開發套件。

  • 在啟動過程中,遊戲伺服器會通知 Amazon GameLift 伺服器已準備好託管遊戲工作階段。

  • 遊戲服務器在運行時 GameLift 每分鐘都會向 Amazon 發送健康狀態。

  • 遊戲伺服器回應請求以啟動新遊戲工作階段。

  1. 啟動 Amazon GameLift 本地。

    開啟命令提示字元視窗,導覽到 GameLiftLocal.jar 檔案所在的目錄並執行。在預設情況下,Local 會接聽連接埠 8080 上的遊戲用戶端請求。若要指定不同的連接埠號碼,請使用 -p 參數,如下例所示:

    java -jar GameLiftLocal.jar -p 9080

    一旦 Local 啟動,您會看到記錄顯示兩個本機伺服器已經啟動,一個接聽遊戲伺服器,一個接聽遊戲用戶端或 AWS CLI。記錄會持續報告兩個本機伺服器上的活動,包括與遊戲元件的往來通訊。

  2. 啟動遊戲伺服器。

    在本機啟動 GameLift整合 Amazon 的遊戲伺服器。您不需要變更遊戲伺服器的端點。

    在 [本機命令提示字元] 視窗中,記錄訊息指出您的遊戲伺服器已連線至 Amazon GameLift 本機服務。這表示您的遊戲伺服器成功初始化了 Amazon GameLift 伺服器 SDK (使用InitSDK())。它呼叫顯示記錄路徑的 ProcessReady(),如果成功,則準備託管遊戲工作階段。在遊戲伺服器執行時,Amazon 會 GameLift 記錄來自遊戲伺服器的每個健康狀態報告。下列記錄訊息範例顯示已成功整合的遊戲伺服器:

    16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK connected: /127.0.0.1:64247 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK pid is 17040, sdkVersion is 3.1.5 and sdkLanguage is CSharp 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - NOTE: Only SDK versions 3.1.5 and above are supported in GameLiftLocal! 16:50:53,451 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady received from: /127.0.0.1:64247 and ackRequest requested? true 16:50:53,543 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady data: logPathsToUpload: "C:\\game\\logs" logPathsToUpload: "C:\\game\\error" port: 1935 16:50:53,544 INFO || - [HostProcessManager] nioEventLoopGroup-3-1 - Registered new process true, true, 16:50:53,558 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onReportHealth received from /127.0.0.1:64247 with health status: healthy

    可能發生的錯誤和警告訊息包括:

    • 錯誤:"ProcessReady 沒有找到 PID: 的處理程序:<process ID>! 是否被調用了?」

    • 警告:「使用 PID 進程的進程狀態已經存在:<process ID>! 是 ProcessReady(...)不止一次被調用?」

  3. 啟動 AWS CLI.

    一旦遊戲伺服器成功呼叫 ProcessReady(),您就可以開始進行用戶端呼叫。開啟另一個命令提示字元視窗,然後啟動 AWS CLI 工具。 AWS CLI 默認情況下使用 Amazon GameLift 網絡服務端點。您必須使用 --endpoint-url 參數,在每個請求中以 Local 端點將此覆寫,如下列範例請求所示。

    AWS gamelift describe-game-sessions --endpoint-url http://localhost:9080 --fleet-id fleet-123

    在指 AWS CLI 令提示視窗中,AWS gamelift指令會產生回應,如《指AWS CLI 令參考》中所述。

  4. 建立遊戲工作階段。

    使用 AWS CLI,提交 CreateGameSession() 請求。此請求應遵循預期的語法。對於 Local,此 FleetId 參數可設定為任何有效字串 (^fleet-\S+)。

    AWS gamelift create-game-session --endpoint-url http://localhost:9080 --maximum-player-session-count 2 --fleet-id fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d

    在 [本機命令提示字元] 視窗中,記錄訊息指出 Amazon L GameLift ocal 已傳送您的遊戲伺服器onStartGameSession回呼。如果成功建立遊戲工作階段,您的遊戲伺服器會透過叫用 ActivateGameSession 進行回應。

    13:57:36,129 INFO || - [SDKInvokerImpl] Thread-2 - Finished sending event to game server to start a game session: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6. Waiting for ack response.13:57:36,143 INFO || - [SDKInvokerImpl] Thread-2 - Received ack response: true13:57:36,144 INFO || - [CreateGameSessionDispatcher] Thread-2 - GameSession with id: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6 created13:57:36,227 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate received from: /127.0.0.1:60020 and ackRequest requested? true13:57:36,230 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate data: gameSessionId: "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890"

    在 AWS CLI 視窗中,Amazon 會以包含遊戲工作階段 ID 的遊戲工作階段物件進行 GameLift 回應。請注意,新遊戲工作階段的狀態為 Activating (啟動中)。一旦您的遊戲伺服器呼叫 ActivateGameSession,狀態就會變更為「作用中」。如果您想要查看已變更的狀態,請使用撥 AWS CLI 打電話DescribeGameSessions()

    { "GameSession": { "Status": "ACTIVATING", "MaximumPlayerSessionCount": 2, "FleetId": "fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d", "GameSessionId": "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890", "IpAddress": "127.0.0.1", "Port": 1935 } }

測試遊戲伺服器和用戶端

若要檢查完整的遊戲整合,包括將玩家連接到遊戲,您可以在本機同時執行遊戲伺服器和用戶端。這可讓您測試從遊戲用戶端到 Amazon GameLift 本機的程式設計呼叫。您可以驗證下列動作:

  • 遊戲用戶端已成功向 Amazon L GameLift ocal 服務發出 AWS SDK 請求,包括建立遊戲工作階段、擷取現有遊戲工作階段的資訊,以及建立玩家工作階段。

  • 當玩家嘗試加入遊戲工作階段時,遊戲伺服器正確驗證玩家。對於已驗證的玩家,遊戲伺服器可能會擷取玩家資料 (如有實作)。

  • 當玩家離開遊戲時,遊戲伺服器會報告連接中斷。

  • 遊戲伺服器會報告結束遊戲工作階段。

  1. 啟動 Amazon GameLift 本地。

    開啟命令提示字元視窗,導覽到 GameLiftLocal.jar 檔案所在的目錄並執行。在預設情況下,Local 會接聽連接埠 8080 上的遊戲用戶端請求。若要指定不同的連接埠號碼,請使用 -p 參數,如下例所示。

    ./gamelift-local -p 9080

    一旦 Local 啟動,您會看到記錄顯示兩個本機伺服器已經啟動,一個接聽遊戲伺服器,一個接聽遊戲用戶端或 AWS CLI。

  2. 啟動遊戲伺服器。

    在本機啟動 GameLift整合 Amazon 的遊戲伺服器。如需更多訊息記錄的詳細資訊,請參閱 測試遊戲伺服器

  3. 設定 Local 遊戲用戶端並啟動。

    若要將遊戲用戶端與 Amazon L GameLift ocal 服務搭配使用,您必須對遊戲用戶端的設定進行下列變更,如中所述在後端服務 GameLift 上設置 Amazon

    • ClientConfiguration 物件變更為指向您的 Local 端點,例如 http://localhost:9080

    • 設定目標機群 ID 值。對於 Local,您不需要實際的機群 ID;請將目標機群設定為任何有效字串 (^fleet-\S+),例如 fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d

    • 設定 AWS 認證。對於 Local,您不需要實際的 AWS 登入資料;您可以將存取金鑰和私密金鑰設定為任何字串。

    在 [本機命令提示字元] 視窗中,一旦啟動遊戲用戶端,記錄訊息應指出它已初始化,GameLiftClient並且已成功與 Amazon GameLift 服務通訊。

  4. 測試遊戲用戶端對 Amazon GameLift 服務的呼叫。

    驗證您的遊戲用戶端是否成功進行任何或所有下列 API 呼叫:

    在 Local 命令提示字元視窗中,只有呼叫 CreateGameSession() 才會產生記錄訊息。Amazon L GameLift ocal 提示您的遊戲伺服器啟動遊戲工作階段 (onStartGameSession回呼),並在遊戲伺服器叫用時取得成功ActivateGameSession時,記錄訊息會顯示。在 AWS CLI 視窗中,所有 API 呼叫都會產生回應或錯誤訊息做為記錄。

  5. 驗證您的遊戲伺服器正在驗證新玩家連接。

    建立遊戲工作階段和玩家工作階段之後,與遊戲工作階段建立直接連接。

    在 Local 命令提示字元視窗中,記錄訊息應顯示遊戲伺服器已傳送 AcceptPlayerSession() 請求,以驗證新玩家連接。如果您使用 AWS CLI 來呼叫DescribePlayerSessions(),播放程式工作階段狀態應該會從「保留」變更為「作用中」。

  6. 確認您的遊戲伺服器正在向 Amazon GameLift 服務回報遊戲和玩家狀態。

    為了 GameLift 讓 Amazon 管理玩家需求並正確報告指標,您的遊戲伺服器必須向 Amazon 報告各種狀態 GameLift。驗證 Local 是否正在記錄與下列動作相關的事件。您也可以使用 AWS CLI 來追蹤狀態變更。

    • 玩家與遊戲工作階段中斷連線 — Amazon GameLift 本機記錄訊息應顯示您的遊戲伺服器呼叫RemovePlayerSession()。此外,系統對 DescribePlayerSessions()​ 所進行的 AWS CLI ​ 呼叫,應該會反映出狀態從 Active​ 變更為 Completed。您也可以呼叫 DescribeGameSessions(),檢查遊戲工作階段的目前玩家數目是否減一。

    • 遊戲工作階段結束 — Amazon GameLift 本機記錄訊息應顯示您的遊戲伺服器呼叫TerminateGameSession()

      注意

      以前的指導是在結束遊戲會話TerminateGameSession()時調用。此方法已與 Amazon GameLift 服務器 SDK v4.0.1 棄用。請參閱結束遊戲工作階段

    • 伺服器程序已終止 — Amazon GameLift 本機日誌訊息應顯示您的遊戲伺服器呼叫ProcessEnding()。 AWS CLI 呼叫DescribeGameSessions()應反映從 Terminated (或Terminating) Active 的狀態變更。

與本地的變化

使用 Amazon GameLift 本地時,請記住以下幾點:

  • 與 Amazon GameLift 網絡服務不同,本地不會跟踪服務器的運行狀態並啟動onProcessTerminate回調。Local 只會停止記錄遊戲伺服器的執行狀況報告。

  • 對於 AWS SDK 的呼叫,不會驗證叢集 ID,而且可以是符合參數需求的任何字串值 (^fleet-\S+)。

  • 使用 Local 建立的遊戲工作階段 ID 有不同的架構。它們包含字串 local,如下所示:

    arn:aws:gamelift:local::gamesession/fleet-123/gsess-56961f8e-db9c-4173-97e7-270b82f0daa6