本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon L GameLift ocal 测试您的集成
注意
本主题仅介绍对与 Amazon GameLift 服务器 4.x 或更早SDK版本集成的游戏的测试。您的服务器SDK套餐包括兼容版本的 Amazon L GameLift ocal。如果您使用的是服务器SDK版本 5.x,请参阅 Amazon 在 Amazon 上设置本地测试 GameLift Anywhere 进行本地测试 GameLift Anywhere 舰队。
使用 Amazon Local 在 GameLift 本地设备上运行受限版的亚马逊托管 GameLift 服务,并针对它测试您的游戏集成。此工具在对您的游戏集成进行迭代开发时非常有用。另一种方法是将每个新版本上传到 Amazon, GameLift 然后配置队列来托管您的游戏,每次可能需要几次或更多时间。
使用 Amazon L GameLift ocal,您可以验证以下内容:
-
您的游戏服务器已与服务器正确集成,SDK并且正在与 Amazon GameLift 服务正常通信,以启动新的游戏会话、接受新玩家以及报告生命值和状态。
-
您的游戏客户端已与 for Amazon GameLift 正确集成,能够检索有关现有游戏会话的信息、开始新的游戏会话、让玩家加入游戏以及连接游戏会话。 AWS SDK
Amazon L GameLift ocal 是一个命令行工具,用于启动亚马逊托管服务的独立版本。 GameLift Amazon L GameLift ocal 还提供服务器进程初始化、运行状况检查以及API呼叫和响应的运行事件日志。Amazon L GameLift ocal 可以识别亚马逊的部分 AWS SDK操作 GameLift。您可以从 AWS CLI 或从您的游戏客户端拨打电话。所有API操作都像在 Amazon GameLift 网络服务中一样在本地执行。
每个服务器进程只能托管一个游戏会话。游戏会话是您用来连接到 Amazon L GameLift ocal 的可执行文件。游戏会话完成后,您应该调用GameLiftServerSDK::ProcessEnding
然后退出该进程。使用 Amazon Local 进行 GameLift 本地测试时,您可以启动多个服务器进程。每个流程都将连接到 Amazon L GameLift ocal。然后,您可以为每个服务器进程创建一个游戏会话。当您的游戏会话结束时,您的游戏服务器进程应该退出。然后,必须手动启动另一个服务器进程。
Amazon l GameLift ocal 支持以下内容APIs:
-
CreateGameSession
-
CreatePlayerSession
-
CreatePlayerSessions
-
DescribeGameSessions
-
DescribePlayerSessions
设置 Amazon GameLift 本地版
Amazon L GameLift ocal 以与服务器SDK.jar
文件形式提供。它可以在 Windows 或 Linux 上运行,也可以与任何亚马逊 GameLift支持的语言一起使用。
在运行 Local 之前,您还必须已安装以下各项。
-
Amazon GameLift Server SDK 版本 3.1.5 到 4.x 的版本。
-
Java 8
测试游戏服务器
如果您只想测试游戏服务器,则可以使用 AWS CLI 来模拟游戏客户端对 Amazon L GameLift ocal 服务的调用。这将验证您的游戏服务器是否按预期执行以下操作:
-
游戏服务器可以正常启动并初始化 Amazon GameLift 服务器SDK。
-
作为启动过程的一部分,游戏服务器会通知 Amazon GameLift 服务器已准备好托管游戏会话。
-
游戏服务器在运行时 GameLift 每分钟向 Amazon 发送生命值。
-
游戏服务器响应请求,启动新游戏会话。
-
启动 Amazon L GameLift ocal。
打开命令提示符窗口,导航到包含
文件的目录并运行它。默认情况下,Local 在端口 8080 上侦听来自游戏客户端的请求。要指定不同的端口号,请使用GameLiftLocal.jar
-p
参数,如以下示例所示:java -jar GameLiftLocal.jar -p 9080
Local 启动之后,您可以查看日志,其中指示两个本地服务器已启动,一个列出您的游戏服务器,另一个列出您的游戏客户端或 AWS CLI。日志继续报告两个本地服务器上的活动,包括往返于游戏组件之间的通信。
-
启动游戏服务器。
在本地启动与 GameLift Amazon 集成的游戏服务器。您无需更改游戏服务器的终端节点。
在本地命令提示符窗口中,日志消息表明您的游戏服务器已连接到 Amazon L GameLift ocal 服务。这意味着您的游戏服务器成功初始化了 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>
! Init SDK () 被调用了吗?” -
警告:“PID 为 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用后,状态将变为 “激活”。如果您想查看更改后的状态,请使用 to AWS CLI call
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 L GameLift ocal 的编程调用。您可以验证以下操作:
-
游戏客户端成功向 Amazon L GameLift ocal 服务发出 AWS SDK请求,包括创建游戏会话、检索有关现有游戏会话的信息以及创建玩家会话。
-
游戏服务器在玩家尝试加入游戏会话时,正确验证玩家。对于通过验证的玩家,游戏服务器可能会检索玩家数据 (如果已实施)。
-
游戏服务器在玩家离开游戏时报告断开连接。
-
游戏服务器报告结束游戏会话。
-
启动 Amazon L GameLift ocal。
打开命令提示符窗口,导航到包含
文件的目录并运行它。默认情况下,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()
请求来验证新玩家连接。如果您使用 to call AWS CLIDescribePlayerSessions()
,则玩家会话状态应从 “已保留” 更改为 “激活”。 -
确认您的游戏服务器正在向 Amazon GameLift 服务报告游戏和玩家状态。
为了 GameLift 让亚马逊管理玩家需求并正确报告指标,您的游戏服务器必须向亚马逊 GameLift报告各种状态。验证 Local 正在记录与以下操作相关的事件。您可能还想使用 AWS CLI 来跟踪状态变化。
-
玩家与游戏会话断开连接 — Amazon L GameLift ocal 日志消息应显示您的游戏服务器已调用
RemovePlayerSession()
。对DescribePlayerSessions()
的 AWS CLI 调用应体现出状态从Active
更改为Completed
。您还可以调用DescribeGameSessions()
来检查游戏会话的当前玩家数减少了一个。 -
游戏会话结束 — Amazon L GameLift ocal 日志消息应显示您的游戏服务器已调用
TerminateGameSession()
。注意
之前的指导是在结束游戏会话时调用
TerminateGameSession()
。亚马逊 GameLift服务器 SDK v4.0.1 不建议使用此方法。请参阅 结束游戏会话。 -
服务器进程已终止 — Amazon L GameLift ocal 日志消息应显示您的游戏服务器已调用
ProcessEnding()
。对的 AWS CLI 呼叫DescribeGameSessions()
应反映状态从变Active
为Terminated
(或Terminating
)。
-
Local 的变化
使用 Amazon L GameLift ocal 时,请记住以下几点:
-
与 Amazon GameLift 网络服务不同,Local 不会跟踪服务器的运行状况并启动
onProcessTerminate
回调。Local 仅停止记录游戏服务器的运行状况报告。 -
对于对的调用 AWS SDK,队列不经过验证,可以IDs是任何符合参数要求的字符串值 (
^fleet-\S+
)。 -
使用 Local IDs 创建的游戏会话具有不同的结构。它们包括字符串
local
,如此处所示:arn:aws:gamelift:local::gamesession/fleet-123/gsess-56961f8e-db9c-4173-97e7-270b82f0daa6