

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

# 使用 Amazon GameLift Servers Anywhere 设置本地测试
<a name="integration-testing"></a>

**注意**  
本主题涵盖针对已集成 Amazon GameLift Servers SDK 5.x 版本的游戏所进行的本地测试。如果您的游戏使用的是服务器 SDK 版本 4.x 或更早版本，请参阅[使用 Amazon GameLift Servers Local 测试您的集成。](integration-testing-local.md)。

使用 Amazon GameLift Servers Anywhere 实例集和您自己的硬件在模拟托管环境中迭代构建和测试您的游戏组件。设置 Anywhere 实例集并注册本地设备，以与 Amazon GameLift Servers 服务建立连接。将游戏服务器生成包安装到设备上，启动游戏服务器进程，并根据需要测试游戏功能。您可以按照所需的频率更新游戏服务器生成包，以测试每个新生成包迭代。

使用 Anywhere 队列，您可以使用 AWS CLI 或测试脚本进行测试。如果您已将游戏客户端与 Amazon GameLift Servers 集成，则可以在同一台本地设备或其他设备上运行该客户端。

使用 Anywhere 实例集在本地进行测试对于测试游戏服务器与 Amazon GameLift Servers 的集成特别有用。您可以全面了解本地计算机上的所有托管活动以及事件和日志记录数据。

**注意**  
您使用的是适用于 Unreal Engine 或 Unity 的 Amazon GameLift Servers 插件吗？ 这些工具包含使用 Anywhere 实例集设置本地测试的引导式工作流程。请按照文档 [适用于 Unity 的插件：使用 Amazon GameLift Servers Anywhere 设置本地测试](unity-plug-in-anywhere.md) 或 [适用于 Unreal 的插件：使用 Amazon GameLift Servers Anywhere 在本地托管游戏](unreal-plugin-anywhere.md) 进行操作。

**Topics**
+ [设置本地 Anywhere 实例集](#integration-testing-anywhere-fleet)
+ [更新并安装游戏服务器](#integration-testing-dev)
+ [测试游戏会话活动](#integration-testing-test)
+ [在游戏服务器上进行迭代](#fleet-anywhere-iteration)
+ [将您的游戏过渡到 Amazon GameLift Servers 托管式实例集](#fleet-anywhere-transition)

## 设置本地 Anywhere 实例集
<a name="integration-testing-anywhere-fleet"></a>

按照以下步骤为您的本地工作站创建 Anywhere 实例集。有关使用 AWS CLI 或 for 的详细说明Amazon GameLift Servers， AWS 管理控制台 请参阅[创建 Amazon GameLift Servers Anywhere 实例集](fleets-creating-anywhere.md)。

**创建 Anywhere 实例集**

1. **为本地工作站创建自定义位置。（AWS CLI 或控制台）。**自定义位置只是您计划包含在 Anywhere 实例集内的计算资源的一个标签。自定义位置名称必须以 `custom-` 开头。例如：`custom-my_laptop`。请参阅[创建自定义位置](fleets-creating-anywhere.md#fleet-anywhere-location)。

1. **创建 Anywhere 队列（AWS CLI 或控制台）。**在此步骤中，请使用本地工作站的自定义位置创建实例集资源。请参阅[创建 Anywhere 实例集](fleets-creating-anywhere.md#fleet-anywhere-create)。

   记下新实例集的 ID 或 ARN 值。在下一个步骤中，您需要用到该值。

1. **将您的本地工作站注册为队列计算（仅限AWS CLI）。**Anywhere 实例集必须至少有一个计算资源来托管您的游戏服务器。请参阅[向实例集添加计算](fleets-creating-anywhere.md#fleet-anywhere-compute)。要向实例集添加计算，您需要以下信息：
   + 计算名称。实例集中的每个计算都必须有一个唯一名称。
   + Anywhere 实例集标识符。您可以使用 `FleetID` 或 `FleetArn`。
   + 计算的连接信息。指定 `IpAddress` 或 `DnsName`。这就是 Amazon GameLift Servers 和游戏客户端连接到游戏服务器的方式。
   + Anywhere 实例集内的自定义位置。

   记下 `GameLiftServiceSdkEndpoint` 返回值。当您更新游戏服务器以在 Anywhere 实例集上运行时，您将需要此值。

## 更新并安装游戏服务器
<a name="integration-testing-dev"></a>

此任务假定您已将游戏服务器生成包与 Amazon GameLift Servers 服务器 SDK 5.x 集成。集成过程包括向游戏服务器添加代码，使其能够与 Amazon GameLift Servers 服务交互以启动和管理游戏会话。

对于 Anywhere 实例集，您需要手动配置某些游戏服务器设置。在 Amazon GameLift Servers 托管式实例集内，这些设置会自动配置。

**为 Anywhere 实例集准备游戏服务器**

1. **获取身份验证令牌。**您的游戏服务器在与 Amazon GameLift Servers 服务进行每次通信时，都必须包含身份验证令牌。Amazon GameLift Servers 身份验证令牌有效期较短，必须定期刷新。

   作为最佳实践，请创建脚本来完成以下任务：
   + 调用 C AWS LI 操作`get-compute-auth-token`。
   + 将返回的令牌值存储在游戏服务器进程可以检索到的地方，例如本地计算上的环境变量中。

   将脚本与游戏服务器一起安装在计算上。将脚本设置为在启动第一个游戏服务器进程之前运行。当游戏服务器进程处于活动状态时，请定期运行脚本以保持身份验证令牌有效。计算上的所有游戏服务器进程都可以使用相同的身份验证令牌。

1. **更新 Amazon GameLift Servers 游戏服务器代码。**当您将游戏服务器代码与适用于 Amazon GameLift Servers 的服务器 SDK 集成时，您添加了对 `InitSdk()` 操作的调用。当游戏服务器在 Anywhere 实例集上运行时，此调用需要额外的服务器参数。有关更多信息，请参阅[初始化服务器进程](gamelift-sdk-server-api.md#gamelift-sdk-server-initialize)和适用于您开发语言的 [Amazon GameLift Servers 服务器 SDK 5.x](reference-serversdk.md)。服务器参数是：
   + `webSocketUrl` – 将此参数设置为向实例集注册计算时返回的 `GameLiftServiceSdkEndpoint` 值。
   + `hostId`— 将此参数设置为您在向 Anywhere 队列注册计算时指定的计算名称。
   + `fleetId` – 将此参数设置为 Anywhere 实例集的 ID。
   + `authToken` – 将此参数设置为响应检索计算的身份验证令牌的请求而返回的令牌。
   + `processId` – 设置此参数以标识在本地计算上运行的游戏服务器进程。每个并发的游戏服务器进程都必须有一个唯一的进程 ID。

   每个游戏服务器进程使用的服务器参数值都必须特定于运行该进程的 Anywhere 实例集计算。有关如何为计算获取适当值的详细信息，请参阅[向实例集添加计算](fleets-creating-anywhere.md#fleet-anywhere-compute)。作为最佳实践，请将 `webSocketUrl`、`hostId`、`fleetId` 和 `authToken` 设置为本地计算上的环境变量。在该计算上运行的所有服务器进程都将使用这些值。

1. 在本地计算上安装游戏服务器生成包。加入运行游戏服务器所需的所有依赖项。

1. 启动在本地计算上运行的一个或多个游戏服务器进程。当游戏服务器进程调用服务器 SDK 操作 `ProcessReady()` 时，则说明该进程已准备好托管游戏会话。

## 测试游戏会话活动
<a name="integration-testing-test"></a>

通过使用游戏会话来测试游戏服务器集成。如果您的游戏客户端没有与 Amazon GameLift Servers 功能集成，则可以使用 AWS CLI 启动游戏会话。请尝试以下场景：
+ **创建游戏会话。**调用[create-game-session ](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/create-game-session.html)命令（或 [ CreateGameSession](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_CreateGameSession.html)API 操作）。指定 Anywhere 实例集的 ID 和自定义位置。此调用将返回新游戏会话的唯一标识符。
+ **检查游戏会话状态。**调用[describe-game-sessions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/describe-game-sessions.html)命令（或 [DescribeGameSessions](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_DescribeGameSessions.html)API 操作）。指定游戏会话 ID。此调用将返回详细的游戏会话信息，包括游戏会话状态。处于活动状态的游戏会话已准备就绪，可供玩家连接。要获取舰队所有游戏会话的列表，请调用 [list-game-sessions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/list-game-sessions.html)command（或 [ListGameSessions](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_ListGameSessions.html)API 操作）。
+ **连接到游戏会话。**如果您的游戏客户端可以加入游戏会话，请使用游戏会话信息中包含的连接信息。

## 在游戏服务器上进行迭代
<a name="fleet-anywhere-iteration"></a>

您可以使用相同的 Anywhere 实例集和计算来测试其他版本的游戏服务器生成包。

1. **清理现有的 `GameSession`。**如果游戏服务器进程崩溃或无法调用 `ProcessEnding()`，Amazon GameLift Servers 会在游戏服务器停止发送运行状况检查后清理 `GameSession`。

1. **生成新的游戏服务器生成包。**对游戏服务器进行更改并打包修改后的生成包。

1. **更新本地计算上的游戏服务器生成包。**您之前的 Anywhere 实例集仍处于活动状态，您的笔记本电脑仍注册为实例集内的计算资源。

1. **获取更新后的授权令牌。**调用 [get-compute-auth-token](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/get-compute-auth-token.html)CLI 命令并将令牌存储在本地计算机上。

1. **启动在本地计算上运行的一个或多个游戏服务器进程。**当游戏服务器进程调用 `ProcessReady()` 时，它就可以用于测试了。

## 将您的游戏过渡到 Amazon GameLift Servers 托管式实例集
<a name="fleet-anywhere-transition"></a>

在完成开发测试并准备好发布后，就可以切换到 Amazon GameLift Servers 托管式实例集了。使用托管式实例集来微调和测试游戏托管资源。实施游戏会话放置解决方案（队列和对战构建器），选择最佳托管硬件（包括竞价型实例集）和位置，然后选择容量扩展策略。您可能还想开始使用 AWS CloudFormation 来更有效地管理所有游戏托管资源的生命周期，包括舰队、队列和媒人。

要从本地 Anywhere 测试实例集过渡到 Amazon GameLift Servers 托管式实例集，您需要做一些细微修改。您可以重复使用相同的队列和对战构建器。请执行以下任务：
+ **将游戏服务器代码调用更改为 `InitSdk()`。**删除服务器参数。对于托管式实例集，Amazon GameLift Servers 会自动跟踪此信息。
+ **创建 Amazon GameLift Servers 生成包资源。**使用 Anywhere 测试实例集时，您需要手动将游戏服务器生成包和依赖项部署到每个实例集计算。使用托管式实例集时，您需要创建游戏生成包并把它上传到 Amazon GameLift Servers，后者会自动将生成包部署到所有实例集计算。请参阅[为 Amazon GameLift Servers 创建游戏服务器生成包](gamelift-build-cli-uploading.md)，详细了解如何打包游戏生成包文件以及在 Amazon S3 存储桶中创建包含文件的生成包资源。请勿包含注册计算并获取身份验证令牌的脚本，因为 Amazon GameLift Servers 会通过托管式实例集自动处理这些任务。
+ **创建托管式实例集。**使用控制台或 AWS CLI 创建队列，指定 EC2 托管队列。这种类型的实例集需要额外的配置设置，包括指定生成包资源和实例类型。您还需要设置运行时配置来管理每个实例集计算上的游戏服务器生命周期。请参阅[创建Amazon GameLift Servers托管 EC2 舰队](fleets-creating.md)，详细了解如何创建托管式实例集。
+ **重定向实例集别名（可选）。**如果您设置了要用于 Anywhere 实例集的别名，则可以对托管式实例集使用相同的别名。请参阅[创建 Amazon GameLift Servers别名](aliases-creating.md)，详细了解如何创建或更新别名。