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

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

使用亞馬遜GameLift本地測試您的整合

注意

如果您使用的是 4.x 版或更早版本的 Amazon GameLift 伺服器開發套件版本,請使用此測試程序。您的伺服器 SDK 套件包含相容版本的亞馬遜本機版GameLift本。如果您使用的是伺服器 SDK 版本 5.x,請參閱使使用亞馬遜機GameLiftAnywhere隊測試您的整合用 Amazon GameLift Anywhere 叢集進行本機測試。

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

使用亞馬遜GameLift本地,您可以驗證以下內容:

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

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

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

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

亞馬遜GameLift本地支持以下 API:

  • CreateGameSession

  • CreatePlayerSession

  • CreatePlayerSessions

  • DescribeGameSessions

  • DescribePlayerSessions

設置亞馬遜GameLift本地

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

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

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

  • Java 8

測試遊戲伺服器

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

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

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

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

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

  1. 啟動亞馬遜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默認情況下使用亞馬遜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. 啟動亞馬遜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(),玩家工作階段的狀態應該會從 Reserved (保留) 變更為 Active (作用中)。

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

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

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

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

      注意

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

    • 伺服器程序已終止 — Amazon GameLift 本機日誌訊息應顯示您的遊戲伺服器呼叫ProcessEnding()。此外,系統對 DescribeGameSessions()​ 所進行的 AWS CLI​ 呼叫,應該會反映出狀態從 Active​ 變更為 Terminated​ (或 Terminating​)。

與本地的變化

使用亞馬遜GameLift本地時,請記住以下幾點:

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

  • 使用 AWS 開發套件呼叫時,機群 ID 不需經過驗證,且可以是符合參數需求 (^fleet-\S+) 的任何字串值。

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

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