本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用亞馬遜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每分鐘都會向亞馬遜發送健康狀態。
-
遊戲伺服器回應請求以啟動新遊戲工作階段。
-
啟動亞馬遜GameLift本地。
開啟命令提示字元視窗,導覽到
檔案所在的目錄並執行。在預設情況下,Local 會接聽連接埠 8080 上的遊戲用戶端請求。若要指定不同的連接埠號碼,請使用GameLiftLocal.jar
-p
參數,如下例所示:java -jar GameLiftLocal.jar -p 9080
一旦 Local 啟動,您會看到記錄顯示兩個本機伺服器已經啟動,一個接聽遊戲伺服器,一個接聽遊戲用戶端或 AWS CLI。記錄會持續報告兩個本機伺服器上的活動,包括與遊戲元件的往來通訊。
-
啟動遊戲伺服器。
在本機啟動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(...)不止一次被調用?」
-
-
啟動 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令參考》中所述。 -
建立遊戲工作階段。
使用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 請求,包括建立遊戲工作階段、擷取現有遊戲工作階段的資訊,以及建立玩家工作階段。
-
當玩家嘗試加入遊戲工作階段時,遊戲伺服器正確驗證玩家。對於已驗證的玩家,遊戲伺服器可能會擷取玩家資料 (如有實作)。
-
當玩家離開遊戲時,遊戲伺服器會報告連接中斷。
-
遊戲伺服器會報告結束遊戲工作階段。
-
啟動亞馬遜GameLift本地。
開啟命令提示字元視窗,導覽到
檔案所在的目錄並執行。在預設情況下,Local 會接聽連接埠 8080 上的遊戲用戶端請求。若要指定不同的連接埠號碼,請使用GameLiftLocal.jar
-p
參數,如下例所示。./gamelift-local -p 9080
一旦 Local 啟動,您會看到記錄顯示兩個本機伺服器已經啟動,一個接聽遊戲伺服器,一個接聽遊戲用戶端或 AWS CLI。
-
啟動遊戲伺服器。
在本機啟動GameLift整合 Amazon 的遊戲伺服器。如需更多訊息記錄的詳細資訊,請參閱 測試遊戲伺服器。
-
設定 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 服務通訊。 -
-
測試遊戲用戶端對 Amazon GameLift 服務的呼叫。
驗證您的遊戲用戶端是否成功進行任何或所有下列 API 呼叫:
在 Local 命令提示字元視窗中,只有呼叫
CreateGameSession()
才會產生記錄訊息。Amazon L GameLift ocal 提示您的遊戲伺服器啟動遊戲工作階段 (onStartGameSession
回呼),並在遊戲伺服器叫用時取得成功ActivateGameSession
時,記錄訊息會顯示。在 AWS CLI 視窗中,所有 API 呼叫都會產生回應或錯誤訊息做為記錄。 -
驗證您的遊戲伺服器正在驗證新玩家連接。
建立遊戲工作階段和玩家工作階段之後,與遊戲工作階段建立直接連接。
在 Local 命令提示字元視窗中,記錄訊息應顯示遊戲伺服器已傳送
AcceptPlayerSession()
請求,以驗證新玩家連接。如果您透過 AWS CLI 來呼叫DescribePlayerSessions()
,玩家工作階段的狀態應該會從 Reserved (保留) 變更為 Active (作用中)。 -
確認您的遊戲伺服器正在向 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