本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 服务的调用。这将验证您的游戏服务器是否按预期执行以下操作:
-
游戏服务器正确启动并初始化 服务器开发工具包。
-
在启动过程中,游戏服务器通知 ,服务器已准备好托管游戏会话。
-
在运行时,游戏服务器每分钟将运行状况发送到 。
-
游戏服务器响应请求,启动新游戏会话。
-
Amazon GameLift Local
打开命令提示符窗口,导航到包含
文件的目录并运行它。默认情况下,Local 在端口 8080 上侦听来自游戏客户端的请求。要指定不同的端口号,请使用GameLiftLocal.jar
-p
参数,如以下示例所示:java -jar GameLiftLocal.jar -p 9080
Local 启动之后,您可以查看日志,其中指示两个本地服务器已启动,一个列出您的游戏服务器,另一个列出您的游戏客户端或 Amazon CLI。日志继续报告两个本地服务器上的活动,包括往返于游戏组件之间的通信。
-
启动游戏服务器。
在本地启动您的 集成游戏服务器。您无需更改游戏服务器的终端节点。
在 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(...)?”
-
-
启动 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 命令参考中所示的响应。 -
创建游戏会话。
使用 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 开发工具包请求,包括创建游戏会话、检索现有游戏会话上的信息以及创建玩家会话。
-
游戏服务器在玩家尝试加入游戏会话时,正确验证玩家。对于通过验证的玩家,游戏服务器可能会检索玩家数据 (如果已实施)。
-
游戏服务器在玩家离开游戏时报告断开连接。
-
游戏服务器报告结束游戏会话。
-
启动 Amazon GameLift Local。
打开命令提示符窗口,导航到包含
文件的目录并运行它。默认情况下,Local 在端口 8080 上侦听来自游戏客户端的请求。要指定不同的端口号,请使用GameLiftLocal.jar
-p
参数,如以下示例所示。./gamelift-local -p 9080
Local 启动之后,您可以查看日志,其中显示两个本地服务器已启动,一个列出您的游戏服务器,另一个列出您的游戏客户端或 Amazon CLI。
-
启动游戏服务器。
在本地启动您的 Amazon GameLift 集成游戏服务器。有关消息日志的详细信息,请参阅测试游戏服务器。
-
为 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 命令提示符窗口中,在您启动游戏客户端之后,日志消息应指示它已初始化 ,并且已成功与 服务通信。
-
-
测试游戏客户端对 服务的调用。
验证您的游戏客户端已成功进行任意或所有以下 API 调用:
在 Local 命令提示符窗口中,只有对
CreateGameSession()
的调用才会产生日志消息。日志消息显示 Amazon GameLift Local 何时提示您的游戏服务器启动游戏会话(onStartGameSession
回调)并在您的游戏服务器调用它时获取成功的ActivateGameSession
。在 Amazon CLI 窗口中,记录导致响应或错误消息的所有 API 调用。 -
确保您的游戏服务器正在验证新玩家连接。
创建游戏会话和玩家会话之后,建立与游戏会话的直接连接。
在 Local 命令提示符窗口中,日志消息应显示游戏服务器已发送
AcceptPlayerSession()
请求来验证新玩家连接。如果您使用 Amazon CLI 调用DescribePlayerSessions()
,玩家会话状态应从“Reserved”更改为“Active”。 -
验证您的游戏服务器正在将游戏和玩家状态报告给 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