使用 Amazon L GameLift ocal 测试您的集成 - Amazon GameLift

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 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 发送生命值。

  • 游戏服务器响应请求,启动新游戏会话。

  1. 启动 Amazon L GameLift ocal。

    打开命令提示符窗口,导航到包含 GameLiftLocal.jar 文件的目录并运行它。默认情况下,Local 在端口 8080 上侦听来自游戏客户端的请求。要指定不同的端口号,请使用 -p 参数,如以下示例所示:

    java -jar GameLiftLocal.jar -p 9080

    Local 启动之后,您可以查看日志,其中指示两个本地服务器已启动,一个列出您的游戏服务器,另一个列出您的游戏客户端或 AWS CLI。日志继续报告两个本地服务器上的活动,包括往返于游戏组件之间的通信。

  2. 启动游戏服务器。

    在本地启动与 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(...) 是否多次被调用?”

  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用后,状态将变为 “激活”。如果您想查看更改后的状态,请使用 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请求,包括创建游戏会话、检索有关现有游戏会话的信息以及创建玩家会话。

  • 游戏服务器在玩家尝试加入游戏会话时,正确验证玩家。对于通过验证的玩家,游戏服务器可能会检索玩家数据 (如果已实施)。

  • 游戏服务器在玩家离开游戏时报告断开连接。

  • 游戏服务器报告结束游戏会话。

  1. 启动 Amazon L GameLift ocal。

    打开命令提示符窗口,导航到包含 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() 请求来验证新玩家连接。如果您使用 to call AWS CLI DescribePlayerSessions(),则玩家会话状态应从 “已保留” 更改为 “激活”。

  6. 确认您的游戏服务器正在向 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()应反映状态从变ActiveTerminated(或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