使用 Amazon L GameLift ocal 测试您的集成 - Amazon GameLift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

注意

本主题仅介绍对与 Amazon GameLift 服务器 SDK 版本 4.x 或更早版本集成的游戏的测试。您的服务器 SDK 包中包含兼容版本的 Amazon L GameLift ocal。

使用 Amazon Local 在 GameLift 本地设备上运行受限版的亚马逊托管 GameLift 服务,并针对它测试您的游戏集成。此工具在对您的游戏集成进行迭代开发时非常有用。另一种方法是将每个新版本上传到 Amazon, GameLift 然后配置队列来托管您的游戏,每次可能需要几次或更多时间。

使用 Amazon L GameLift ocal,您可以验证以下内容:

  • 您的游戏服务器已与服务器 SDK 正确集成,并且可以与 Amazon GameLift 服务正常通信,以启动新的游戏会话、接受新玩家以及报告生命值和状态。

  • 您的游戏客户端已正确集成到 Amazon 适用于 Amazon 的 SDK, GameLift 并且能够检索现有游戏会话的信息、开始新的游戏会话、让玩家加入游戏以及连接游戏会话。

Amazon L GameLift ocal 是一个命令行工具,用于启动亚马逊托管服务的独立版本。 GameLift Amazon L GameLift ocal 还提供服务器进程初始化、运行状况检查以及 API 调用和响应的运行事件日志。Amazon L GameLift ocal 可识别亚马逊 Amazon 软件开发工具包操作的子集 GameLift。您可以从 Amazon CLI 或从您的游戏客户端拨打电话。所有 API 操作都在本地执行,就像在 Amazon GameLift 网络服务中一样。

每个服务器进程只能托管一个游戏会话。游戏会话是您用来连接到 Amazon L GameLift ocal 的可执行文件。游戏会话完成后,您应该调用GameLiftServerSDK::ProcessEnding然后退出该进程。使用 Amazon Local 进行 GameLift 本地测试时,您可以启动多个服务器进程。每个流程都将连接到 Amazon L GameLift ocal。然后,您可以为每个服务器进程创建一个游戏会话。当您的游戏会话结束时,您的游戏服务器进程应该退出。然后,必须手动启动另一个服务器进程。

Amazon l GameLift ocal 支持以下 API:

  • CreateGameSession

  • CreatePlayerSession

  • CreatePlayerSessions

  • DescribeGameSessions

  • DescribePlayerSessions

设置 Amazon GameLift 本地版

Amazon L GameLift ocal 作为与服务器软件开发工具包捆绑在一起的可执行.jar文件提供。它可以在 Windows 或 Linux 上运行,也可以与任何亚马逊 GameLift支持的语言一起使用。

在运行 Local 之前,您还必须已安装以下各项。

  • Amazon S GameLift erver SDK 版本 3.1.5 至 4.x 的版本。

  • Java 8

测试游戏服务器

如果您只想测试游戏服务器,则可以使用 Amazon 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 启动之后,您可以查看日志,其中指示两个本地服务器已启动,一个列出您的游戏服务器,另一个列出您的游戏客户端或 Amazon CLI。日志继续报告两个本地服务器上的活动,包括往返于游戏组件之间的通信。

  2. 启动游戏服务器。

    在本地启动与 GameLift Amazon 集成的游戏服务器。您无需更改游戏服务器的终端节点。

    在本地命令提示符窗口中,日志消息表明您的游戏服务器已连接到 Amazon L GameLift ocal 服务。这意味着您的游戏服务器成功初始化了 Amazon S GameLift erver 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

    潜在的错误和警告消息包括以下内容:

    • <process ID>错误:“ProcessReady 未找到 PID 为:!的进程 是否已调用 InitSDK()?”

    • 警告:“Process state already exists for process with pID: <process ID>! ProcessReady(...) 是否多次被调用?”

  3. 启动 Amazon CLI.

    在您的游戏服务器成功调用 ProcessReady() 之后,您可以开始进行客户端调用。打开另一个命令提示符窗口并启动 Amazon CLI 工具。 Amazon CLI 默认情况下,使用亚马逊 GameLift 网络服务终端节点。您必须在使用 --endpoint-url 参数的每个请求中,使用 Local 终端节点覆盖此项,如以下示例请求中所示。

    Amazon gamelift describe-game-sessions --endpoint-url http://localhost:9080 --fleet-id fleet-123

    在 Amazon CLI 命令提示符窗口中,Amazon gamelift命令会产生响应,如Amazon CLI 命令参考中所述。

  4. 创建游戏会话。

    使用 Amazon CLI,提交 CreateGameSession() 请求。该请求应采用预期的语法。对于 Local,FleetId 参数可以设置为任意有效字符串 (^fleet-\S+)。

    Amazon 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"

    在 Amazon CLI 窗口中,Amazon 使用包含游戏会话 ID 的游戏会话对象进行 GameLift 响应。请注意,新游戏会话的状态为“Activating”。游戏服务器调 ActivateGameSession用后,状态将变为 “激活”。如果您想查看更改后的状态,请使用 to Amazon 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 服务发出 Amazon SDK 请求,包括创建游戏会话、检索有关现有游戏会话的信息以及创建玩家会话。

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

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

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

  1. 启动 Amazon L GameLift ocal。

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

    ./gamelift-local -p 9080

    Local 启动之后,您可以查看日志,其中显示两个本地服务器已启动,一个列出您的游戏服务器,另一个列出您的游戏客户端或 Amazon 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

    • 设置 Amazon 凭据。对于 Local,您无需实际的 Amazon 凭证,您可以将访问密钥和私有密钥设置为任意字符串。

    在本地命令提示符窗口中,启动游戏客户端后,日志消息应表明它已初始化GameLiftClient并已成功与 Amazon GameLift 服务通信。

  4. 测试游戏客户端对 Amazon GameLift 服务的调用。

    验证您的游戏客户端已成功进行任意或所有以下 API 调用:

    在 Local 命令提示符窗口中,只有对 CreateGameSession() 的调用才会产生日志消息。当 Amazon L GameLift ocal 提示您的游戏服务器启动游戏会话(onStartGameSession回调)并在游戏服务器调用游戏会话ActivateGameSession时成功启动会话时,日志消息会显示。在 Amazon CLI 窗口中,记录导致响应或错误消息的所有 API 调用。

  5. 确保您的游戏服务器正在验证新玩家连接。

    创建游戏会话和玩家会话之后,建立与游戏会话的直接连接。

    在 Local 命令提示符窗口中,日志消息应显示游戏服务器已发送 AcceptPlayerSession() 请求来验证新玩家连接。如果您使用 to call Amazon CLI DescribePlayerSessions(),则玩家会话状态应从 “已保留” 更改为 “激活”。

  6. 确认您的游戏服务器正在向 Amazon GameLift 服务报告游戏和玩家状态。

    为了 GameLift 让亚马逊管理玩家需求并正确报告指标,您的游戏服务器必须向亚马逊 GameLift报告各种状态。验证 Local 正在记录与以下操作相关的事件。您可能还想使用 Amazon CLI 来跟踪状态变化。

    • 玩家与游戏会话断开连接 — Amazon L GameLift ocal 日志消息应显示您的游戏服务器已调用RemovePlayerSession()。对 DescribePlayerSessions() 的 Amazon CLI 调用应体现出状态从 Active 更改为 Completed。您还可以调用 DescribeGameSessions() 来检查游戏会话的当前玩家数减少了一个。

    • 游戏会话结束 — Amazon L GameLift ocal 日志消息应显示您的游戏服务器已调用TerminateGameSession()

      注意

      之前的指导是在结束游戏会话时调用 TerminateGameSession()。亚马逊 GameLift服务器软件开发工具包 v4.0.1 不推荐使用此方法。请参阅 结束游戏会话

    • 服务器进程已终止 — Amazon L GameLift ocal 日志消息应显示您的游戏服务器已调用ProcessEnding()。对的 Amazon CLI 呼叫DescribeGameSessions()应反映状态从变ActiveTerminated(或Terminating)。

Local 的变化

使用 Amazon L GameLift ocal 时,请记住以下几点:

  • 与 Amazon GameLift 网络服务不同,Local 不会跟踪服务器的运行状况并启动onProcessTerminate回调。Local 仅停止记录游戏服务器的运行状况报告。

  • 对于对 Amazon SDK 的调用,队列 ID 未经验证,可以是任何符合参数要求的字符串值 (^fleet-\S+)。

  • 使用 Local 创建的游戏会话 ID 具有不同结构。它们包括字符串 local,如此处所示:

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