本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon GameLift Local 測試您的整合
注意
本主題僅涵蓋測試與 Amazon GameLift 伺服器 4.x 版或更早SDK版本整合的遊戲。您的伺服器SDK套件包含相容的 Amazon GameLift Local 版本。如果您使用的是伺服器 5.x SDK版,請參閱 使用 Amazon 設定本機測試 GameLift Anywhere 以取得 Amazon 的本機測試 GameLift Anywhere 機群。
使用 Amazon GameLift Local 在本機裝置上執行受管 Amazon GameLift 服務的有限版本,並測試您的遊戲整合。此工具在對遊戲整合進行重複性開發時非常有用。替代方案是將每個新建置上傳到 Amazon GameLift 並設定機群來託管遊戲,每次都可能需要數次或多次。
透過 Amazon GameLift Local,您可以驗證下列項目:
-
您的遊戲伺服器已與伺服器正確整合,SDK並正與 Amazon GameLift 服務正確通訊,以開始新的遊戲工作階段、接受新的玩家,以及報告運作狀態和狀態。
-
您的遊戲用戶端已與 Amazon 版 AWS SDK正確整合 GameLift ,並且能夠擷取現有遊戲工作階段的資訊、開始新的遊戲工作階段、加入玩家至遊戲並連線至遊戲工作階段。
Amazon GameLift Local 是命令列工具,可啟動 Amazon 受管 GameLift 服務的自助版本。Amazon GameLift Local 也提供執行中的伺服器程序初始化、運作狀態檢查以及API呼叫和回應事件日誌。Amazon GameLift Local 會識別 Amazon 動作的 AWS SDK子集 GameLift。您可以從 AWS CLI 或從遊戲用戶端撥打電話。所有API動作都會在本機執行,就像在 Amazon GameLift Web 服務中一樣。
每個伺服器程序只能託管單一遊戲工作階段。遊戲工作階段是您用來連線至 Amazon GameLift Local 的可執行檔。遊戲工作階段完成後,您應該呼叫 GameLiftServerSDK::ProcessEnding
,然後結束程序。使用 Amazon GameLift Local 在本機進行測試時,您可以啟動多個伺服器程序。每個程序都會連線至 Amazon GameLift Local。然後,您可以為每個伺服器程序建立一個遊戲工作階段。當您的遊戲工作階段結束時,您的遊戲伺服器程序應結束。然後,您必須手動啟動另一個伺服器程序。
Amazon GameLift Local 支援下列 APIs:
-
CreateGameSession
-
CreatePlayerSession
-
CreatePlayerSessions
-
DescribeGameSessions
-
DescribePlayerSessions
設定 Amazon GameLift 本機
Amazon GameLift Local 以與伺服器 SDK.jar
檔案的形式提供。它可以在 Windows 或 Linux 上執行,並與任何 Amazon GameLift支援的語言搭配使用。
執行 Local 之前,您必須同時安裝下列項目。
-
Amazon GameLift Server 3.1.5 至 4.x SDK版的建置。
-
Java 8
測試遊戲伺服器
如果您只想測試遊戲伺服器,您可以使用 AWS CLI 來模擬對 Amazon GameLift Local 服務的遊戲用戶端呼叫。這會驗證您的遊戲伺服器是否依下列操作執行:
-
遊戲伺服器會正確啟動並初始化 Amazon GameLift Server SDK。
-
作為啟動程序的一部分,遊戲伺服器會通知 Amazon GameLift 伺服器已準備好託管遊戲工作階段。
-
遊戲伺服器會在執行時 GameLift 每分鐘將運作狀態傳送至 Amazon。
-
遊戲伺服器回應請求以啟動新遊戲工作階段。
-
啟動 Amazon GameLift Local。
開啟命令提示字元視窗,導覽到
檔案所在的目錄並執行。在預設情況下,Local 會接聽連接埠 8080 上的遊戲用戶端請求。若要指定不同的連接埠號碼,請使用GameLiftLocal.jar
-p
參數,如下例所示:java -jar GameLiftLocal.jar -p 9080
一旦 Local 啟動,您會看到記錄顯示兩個本機伺服器已經啟動,一個接聽遊戲伺服器,一個接聽遊戲用戶端或 AWS CLI。記錄會持續報告兩個本機伺服器上的活動,包括與遊戲元件的往來通訊。
-
啟動遊戲伺服器。
在本機啟動 Amazon GameLift整合的遊戲伺服器。您不需要變更遊戲伺服器的端點。
在本機命令提示字元視窗中,日誌訊息表示您的遊戲伺服器已連線至 Amazon GameLift Local 服務。這表示您的遊戲伺服器已成功初始化 Amazon GameLift Server 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>
! 是否已叫用 Init SDK()?" -
警告:「具有 pID 的程序的程序狀態已存在:
<process ID>
! ProcessReady(...) 是否多次叫用?"
-
-
啟動 AWS CLI。
一旦遊戲伺服器成功呼叫
ProcessReady()
,您就可以開始進行用戶端呼叫。開啟另一個命令提示字元視窗,然後啟動 AWS CLI 工具。 AWS CLI 依預設會使用 Amazon GameLift Web 服務端點。您必須使用--endpoint-url
參數,在每個請求中以 Local 端點將此覆寫,如下列範例請求所示。AWS gamelift describe-game-sessions --endpoint-url http://localhost:9080 --fleet-id fleet-123
在 AWS CLI 命令提示字元視窗中,
AWS gamelift
命令會導致回應,如AWS CLI 命令參考 所述。 -
建立遊戲工作階段。
使用 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 GameLift Local 已傳送回
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 會以遊戲工作階段物件 GameLift 回應,包括遊戲工作階段 ID。請注意,新遊戲工作階段的狀態為 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 Local 的程式設計呼叫。您可以驗證下列動作:
-
遊戲用戶端已成功向 Amazon GameLift Local 服務提出 AWS SDK請求,包括建立遊戲工作階段、擷取現有遊戲工作階段的資訊,以及建立玩家工作階段。
-
當玩家嘗試加入遊戲工作階段時,遊戲伺服器正確驗證玩家。對於已驗證的玩家,遊戲伺服器可能會擷取玩家資料 (如有實作)。
-
當玩家離開遊戲時,遊戲伺服器會報告連接中斷。
-
遊戲伺服器會報告結束遊戲工作階段。
-
啟動 Amazon GameLift Local。
開啟命令提示字元視窗,導覽到
檔案所在的目錄並執行。在預設情況下,Local 會接聽連接埠 8080 上的遊戲用戶端請求。若要指定不同的連接埠號碼,請使用GameLiftLocal.jar
-p
參數,如下例所示。./gamelift-local -p 9080
一旦 Local 啟動,您會看到記錄顯示兩個本機伺服器已經啟動,一個接聽遊戲伺服器,一個接聽遊戲用戶端或 AWS CLI。
-
啟動遊戲伺服器。
在本機啟動 Amazon GameLift整合的遊戲伺服器。如需更多訊息記錄的詳細資訊,請參閱 測試遊戲伺服器。
-
設定 Local 遊戲用戶端並啟動。
若要將遊戲用戶端與 Amazon GameLift Local 服務搭配使用,您必須對遊戲用戶端的設定進行下列變更,如 所述在後端服務 GameLift 上設定 Amazon:
-
將
ClientConfiguration
物件變更為指向您的 Local 端點,例如http://localhost:9080
。 -
設定目標機群 ID 值。對於 Local,您不需要實際的機群 ID;請將目標機群設定為任何有效字串 (
^fleet-\S+
),例如fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
。 -
設定 AWS 憑證。對於 Local,您不需要實際的 AWS 登入資料;您可以將存取金鑰和私密金鑰設定為任何字串。
在本機命令提示字元視窗中,一旦啟動遊戲用戶端,日誌訊息應指出它已初始化 ,
GameLiftClient
並已成功與 Amazon GameLift 服務通訊。 -
-
測試 Amazon GameLift 服務的遊戲用戶端呼叫。
確認您的遊戲用戶端已成功進行下列任何或所有API呼叫:
在 Local 命令提示字元視窗中,只有呼叫
CreateGameSession()
才會產生記錄訊息。日誌訊息會顯示 Amazon GameLift Local 提示您的遊戲伺服器啟動遊戲工作階段 (onStartGameSession
回呼),並在您的遊戲伺服器調用ActivateGameSession
時成功。在 AWS CLI 視窗中,所有API呼叫都會產生回應或錯誤訊息,如所記錄。 -
驗證您的遊戲伺服器正在驗證新玩家連接。
建立遊戲工作階段和玩家工作階段之後,與遊戲工作階段建立直接連接。
在 Local 命令提示字元視窗中,記錄訊息應顯示遊戲伺服器已傳送
AcceptPlayerSession()
請求,以驗證新玩家連接。如果您使用 AWS CLI 呼叫DescribePlayerSessions()
,播放器工作階段狀態應該從預留變更為作用中。 -
確認您的遊戲伺服器正在向 Amazon GameLift 服務回報遊戲和玩家狀態。
若要 GameLift 讓 Amazon 管理玩家需求並正確報告指標,您的遊戲伺服器必須將各種狀態回報給 Amazon GameLift。驗證 Local 是否正在記錄與下列動作相關的事件。您也可以使用 AWS CLI 來追蹤狀態變更。
-
玩家中斷與遊戲工作階段的連線 – Amazon GameLift Local 日誌訊息應會顯示您的遊戲伺服器呼叫
RemovePlayerSession()
。此外,系統對DescribePlayerSessions()
所進行的 AWS CLI 呼叫,應該會反映出狀態從Active
變更為Completed
。您也可以呼叫DescribeGameSessions()
,檢查遊戲工作階段的目前玩家數目是否減一。 -
遊戲工作階段結束 – Amazon GameLift Local 日誌訊息應顯示您的遊戲伺服器呼叫
TerminateGameSession()
。注意
先前的指引是在結束遊戲工作階段
TerminateGameSession()
時呼叫 。此方法已棄用 Amazon GameLift Server v4.0SDK.1。請參閱 結束遊戲工作階段。 -
伺服器程序已終止 – Amazon GameLift Local Log 訊息應會顯示您的遊戲伺服器呼叫
ProcessEnding()
。對 的 AWS CLI 呼叫DescribeGameSessions()
應反映狀態從Active
變更為Terminated
(或Terminating
)。
-
本機版本
使用 Amazon GameLift Local 時,請記住下列事項:
-
與 Amazon GameLift Web 服務不同,Local 不會追蹤伺服器的運作狀態並啟動回
onProcessTerminate
呼。Local 只會停止記錄遊戲伺服器的執行狀況報告。 -
對於對 的呼叫 AWS SDK,機群IDs不會經過驗證,並且可以是符合參數需求 () 的任何字串值
^fleet-\S+
。 -
使用 Local IDs建立的遊戲工作階段具有不同的結構。它們包含字串
local
,如下所示:arn:aws:gamelift:local::gamesession/fleet-123/gsess-56961f8e-db9c-4173-97e7-270b82f0daa6