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

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

使用 Amazon GameLift Local 测试您的集成

注意

如果您使用的是版本 4.x 或更早版本的 Amazon GameLift 服务器软件开发工具包,请使用此测试程序。您的服务器软件开发工具包 包中包含兼容版本的 Amazon GameLift Local。

使用 Local 可以在本地设备上运行托管 服务的有限版本,并在其上测试您的游戏集成。此工具在对您的游戏集成进行迭代开发时非常有用。其替代方法是将每个新生成的游戏上传到 &AGSlong; 并配置实例集来托管游戏,每次都需要 30 分钟或更长时间。

通过 Local,您可以验证以下内容:

  • 您的游戏服务器与服务器开发工具包正确集成,并且正确与 服务通信,可启动新游戏会话、接受新玩家和报告运行状况及状态。

  • 您的游戏客户端与适用于 Amazon 的 Amazon 开发工具包正确集成,可以检索现有游戏会话的信息,启动新游戏会话,让玩家加入游戏并连接到游戏会话。

Local 是一个命令行工具,可启动托管 服务的独立版本。 Local 还提供了服务器进程初始化、运行状况检查以及 API 调用和响应的运行事件日志。Amazon GameLift Local 可识别 Amazon GameLift 的软件开发工具包Amazon操作的子集。您可以从 Amazon CLI 或者从游戏客户端进行调用。在本地执行的所有 API 操作与在 Web 服务上执行时完全一样。

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

Amazon GameLift 本地版支持以下 API:

  • CreateGameSession()

  • CreatePlayerSession()

  • CreatePlayerSessions()

  • DescribeGameSessions()

  • DescribePlayerSessions()

Amazon GameLift Local

Local 作为与服务器开发工具包捆绑的可执行 文件提供。它可以在 Windows 或 Linux 上运行,并可用于任何 支持的语言。

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

  • Amazon GameLift Server Server软件开发工具包 版本 3.1.5 至 4.x 的版本。

  • Java 8

测试游戏服务器

如果您只要测试游戏服务器,则可以使用 来模拟游戏客户端对 Local 服务的调用。这将验证您的游戏服务器是否按预期执行以下操作:

  • 游戏服务器正确启动并初始化 服务器开发工具包。

  • 在启动过程中,游戏服务器通知 ,服务器已准备好托管游戏会话。

  • 在运行时,游戏服务器每分钟将运行状况发送到 。

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

  1. Amazon GameLift Local

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

    java -jar GameLiftLocal.jar -p 9080

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

  2. 启动游戏服务器。

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

    在 Local 命令提示符窗口中,日志消息指示您的游戏服务器已连接至 Local 服务。这意味着游戏服务器已成功初始化 服务器开发工具包(使用 )。它使用所示的日志路径调用 ProcessReady(),如果成功,则已准备好托管游戏会话。在游戏服务器运行期间, 记录来自各游戏服务器的各个运行状况报告。以下日志消息示例显示了成功集成的游戏服务器:

    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 did not find a process with pID: <process ID>! 是否已调用 InitSDK()?”

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

  3. 启动 Amazon CLI。

    在您的游戏服务器成功调用 ProcessReady() 之后,您可以开始进行客户端调用。打开另一个命令提示符窗口并启动 Amazon CLI 工具。默认情况下,Amazon CLI 使用 Amazon GameLift Web 服务端点。您必须在使用 --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

    在 Local 命令提示符窗口中,日志消息指示 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"

    在 Amazon CLI 窗口中,Amazon GameLift 使用包含游戏会话 ID 的游戏会话对象进行响应。请注意,新游戏会话的状态为“Activating”。游戏会话调用 ActivateGameSession 后,状态将更改为“Active”。如果您希望查看更改后的状态,请使用 Amazon 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 } }

测试游戏服务器和客户端

要检查您的完整游戏集成,包括将玩家连接到游戏,您可以在本地运行游戏服务器和客户端。这使您可以测试从游戏客户端对 Local 进行的编程调用。您可以验证以下操作:

  • 游戏客户端成功向 Amazon GameLift Local 服务发出 Amazon 开发工具包请求,包括创建游戏会话、检索现有游戏会话上的信息以及创建玩家会话。

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

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

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

  1. 启动 Amazon GameLift Local。

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

    ./gamelift-local -p 9080

    Local 启动之后,您可以查看日志,其中显示两个本地服务器已启动,一个列出您的游戏服务器,另一个列出您的游戏客户端或 Amazon CLI。

  2. 启动游戏服务器。

    在本地启动您的 Amazon GameLift 集成游戏服务器。有关消息日志的详细信息,请参阅测试游戏服务器

  3. 为 Local 配置您的游戏客户端并启用它。

    要将您的游戏客户端与 Amazon GameLift Local 服务一起使用,您必须对游戏客户端的设置进行以下更改,如在后端服务 GameLift 上设置 Amazon中所述:

    • 更改 ClientConfiguration 对象以指向您的 Local 终端节点,例如 http://localhost:9080

    • 设置目标实例集 ID 值。对于 Local,您不需要实际实例集 ID;可以将目标实例集设置为任意有效字符串 (^fleet-\S+),例如 fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d

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

    在 Local 命令提示符窗口中,在您启动游戏客户端之后,日志消息应指示它已初始化 ,并且已成功与 服务通信。

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

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

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

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

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

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

  6. 验证您的游戏服务器正在将游戏和玩家状态报告给 Amazon GameLift 服务。

    要让 Amazon GameLift 管理玩家需求并正确报告指标,您的游戏服务器必须将各种状态报告回 Amazon GameLift。验证 Local 正在记录与以下操作相关的事件。您可能还希望使用 Amazon CLI 跟踪状态更改。

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

    • 游戏会话结束 – Amazon GameLift Local 日志消息应显示游戏服务器调用了 TerminateGameSession()

      注意

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

    • 服务器进程终止 – Amazon GameLift Local 日志消息应显示游戏服务器调用了 ProcessEnding()。对 DescribeGameSessions() 的 Amazon CLI 调用应体现出状态从 Active 更改为 Terminated(或 Terminating)。

Local 的变化

使用 Amazon GameLift Local 时,请记住以下内容:

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

  • 对于面向 Amazon 软件开发工具包的调用,不验证实例集 ID,该 ID 可以是满足参数要求 (^fleet-\S+) 的任意字符串值。

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

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