

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

# 使用 Amazon GameLift Servers 托管的工作原理
<a name="gamelift-howitworks"></a>

Amazon GameLift Servers 是一项服务，可为您基于会话的多人游戏提供专用的低成本服务器、基础设施预调配、扩缩和会话管理。该服务提供灵活的工具和功能，您可以根据游戏进行自定义或与自己的系统结合使用。利用 Amazon GameLift Servers 托管式主机，您可以专注于打造出色游戏体验，而不是管理服务器操作。

本主题将介绍完整的 Amazon GameLift Servers 托管解决方案的核心组件，以及它们如何协同工作为玩家提供多人游戏会话。

## 游戏托管解决方案的核心组件
<a name="gamelift-howitworks-components"></a>

完整的 Amazon GameLift Servers 托管解决方案由几个基本组件组成，这些组件协同工作以提供多人游戏体验。其中一些组件由您构建和管理，而其他组件则由 Amazon GameLift Servers 提供并根据您的配置选择进行管理。了解这些组件的交互方式及其各自的角色，对于开发有效的游戏托管解决方案至关重要。组件包括：
+ 游戏客户端：运行于玩家设备。
+ 后端服务：使游戏客户端能够与 Amazon GameLift Servers 通信，以获取游戏会话信息并加入游戏。
+ 游戏服务器软件：在游戏托管资源上运行，并为一组玩家托管游戏会话。
+ 放置系统：启动游戏会话并将玩家与游戏进行匹配。
+ 游戏托管实例集：在一个或多个地理位置提供游戏服务器。
+ 游戏托管管理系统：监控游戏托管状态并管理容量。

![\[使用托管式 Amazon GameLift Servers 的游戏架构。\]](http://docs.aws.amazon.com/zh_cn/gameliftservers/latest/developerguide/images/game_architecture.png)


### 游戏客户端
<a name="gamelift-howitworks-components-client"></a>

游戏客户端是在玩家设备上运行的游戏软件。它通过与后端服务通信来启动玩家加入游戏会话的过程，并直接连接到游戏服务器以参与游戏玩法。

**游戏托管的关键功能**
+ 向后端服务发送加入请求。在加入请求中包含相关的玩家数据和游戏会话数据。
+ 收集游戏客户端的延迟数据，并将这些信息包含在加入请求中。
+ 接收来自后端服务的游戏会话连接信息，并利用这些信息来连接到游戏服务器。
+ 处理会话连接场景，例如玩家验证、Amazon GameLift Servers FlexMatch 的对战接受、会话中断或断开连接。

**由谁构建**  
您需要将游戏托管功能添加到游戏客户端软件中，并设置与后端服务的通信。

### 后端服务
<a name="gamelift-howitworks-components-backend"></a>

后端服务是游戏客户端与 Amazon GameLift Servers 服务之间的协调层。它控制与服务的所有通信，以请求游戏会话放置以及检索游戏会话和玩家会话信息。最佳实践是使用后端服务，它可以代表游戏客户端与服务保持安全通信，并避免与游戏客户端共享敏感的 AWS 凭证和权限。

您的后端服务为您的游戏会话实施玩家分组策略。在玩家如何进入游戏会话方面，您拥有高度的灵活性。您可以为玩家设置游戏会话浏览器或支持玩家定义的组队。或者，您可以在收到游戏会话请求时将它们汇集起来，组成玩家组（可能经过预先排序），并为每个组启动一个游戏会话。通过 FlexMatch 对战，您可以组建玩家对战并回填现有对战。

**游戏托管的关键功能**
+ 对来自游戏客户端的通信进行身份验证。
+ 向 Amazon GameLift Servers 发送请求以启动新的游戏会话、获取游戏会话信息或加入现有游戏会话。根据需要在请求中包含相关的游戏会话和玩家数据。
+ （可选）创建玩家会话请求，以更密切地监控游戏会话的可用性。使用玩家会话来预留游戏会话位置、验证玩家何时连接以及跟踪玩家断开连接情况。
+ 根据要求向游戏客户端提供游戏会话连接详细信息和其他信息。

**由谁构建**  
您需要在由您管理的环境中构建后端服务，以支持您的游戏要求并实现玩家进入游戏的方式。集成 S AWS DK 以调用Amazon GameLift Servers服务 API。（可选） AWS 使用亚马逊简单存储服务 (Amazon S3) Service 和 Amazon Cognito 等 AWS Lambda服务来构建您的后端服务。

### 游戏服务器
<a name="gamelift-howitworks-components-gameserver"></a>

游戏服务器是您的自定义服务器软件，用于管理游戏状态、处理玩家操作并在多个连接的玩家之间同步游戏。游戏服务器与 Amazon GameLift Servers 服务保持通信，以管理游戏会话托管。

**游戏托管的关键功能**
+ 与 Amazon GameLift Servers 进行通信，以实现以下目标：
  + 报告状态（准备就绪可托管会话、准备就绪可接受玩家、运行状况）。
  + 响应服务调用（开始或结束游戏会话）。
+ 管理游戏会话生命周期，确保每个进程一次仅托管一个游戏会话。
+ 与其他 AWS 服务协调以增加功能。
+ （可选）验证新的玩家连接。

**由谁构建**  
您负责构建您的游戏服务器软件。您可以为 Amazon GameLift Servers 集成服务器 SDK 并添加功能以建立与服务的连接，同时支持游戏会话管理。

### 游戏托管实例集
<a name="gamelift-howitworks-components-fleet"></a>

托管实例集是运行您的游戏服务器的计算资源集合。实例集资源可分布于多个地理位置，无论玩家位于何处，皆能提供低延迟的游戏体验。每个实例集资源都运行一个或多个游戏服务器进程，这些进程直接与 Amazon GameLift Servers 通信。每个游戏服务器进程一次只能托管一个游戏会话。

实例集的特性和功能因实例集的托管类型而异。托管舰队将资源部署到 AWS 云 并由管理。Amazon GameLift Servers任何地方的实例集都是客户提供的计算资源，在 Amazon GameLift Servers 外部进行管理。

**游戏托管的关键功能**
+ 预调配游戏服务器托管资源。
  + 托管实例集部署基于云的 Amazon EC2 实例，支持多种配置设置。实例集配置决定实例集中每个实例的计算能力、实例的物理位置和其他详细信息。托管实例集添加或移除 EC2 实例，以响应容量扩展 
  + 任何地方的实例集部署都是自行管理的。实例集可以由物理硬件或其他云资源组成，并可根据需要进行配置。
+ 安装运行时环境和游戏服务器软件。
  + 托管式 Amazon EC2 实例集实例与您的游戏服务器生成包以及包含兼容运行时环境的亚马逊机器映像（AMI）一同部署。
  + 托管容器实例集实例与您的游戏服务器生成包和容器优化的 AMI 一同部署，且容器优化的 AMI 中包含 Docker 工具和其他组件，可与 Amazon ECS 结合使用。
  + Anywhere 实例集将根据您选择的游戏服务器软件和操作系统进行部署。
+ 管理游戏服务器进程生命周期。应用预先配置的运行时指令来启动和停止每个实例集资源的进程。

**由谁构建**

这取决于实例集的托管类型：
+ 托管 Amazon EC2 队列：您可以将游戏服务器版本上传到Amazon GameLift Servers，然后将其存储到队列实例中。 Amazon GameLift Servers提供舰队 AWS 云 的基础设施。您需要配置实例集并指导它如何在每个实例集实例上运行游戏服务器。
+ 托管容器队列：您将游戏服务器编译和运行时指令打包成容器镜像，存储在 Amazon ECR 中进行部署。 Amazon GameLift Servers提供舰队 AWS 云 的基础设施。您需要提供容器架构，并配置实例集来托管您的容器。
+ Anywhere 实例集：您负责预调配所有基础设施并管理服务器软件部署。您需要创建 Anywhere 实例集，以将您的活跃游戏托管资源与 Amazon GameLift Servers 相连接。

### 游戏会话放置系统
<a name="gamelift-howitworks-components-placement"></a>

游戏会话放置系统会定位可用的游戏服务器来托管新的游戏会话。该系统使用有关游戏服务器可用性的实时信息来做出最佳的放置决策。

在 Amazon GameLift Servers 中，主要的游戏会话放置机制是队列。游戏会话队列使用您可以配置的算法来放置游戏会话，从而实现最佳结果。您可以根据最低托管成本和最低玩家延迟等因素确定放置的优先顺序，也可以配置队列以跨多个地理位置进行搜索。作为队列的替代方案，您可以指定特定的实例集来托管您的游戏会话。

**游戏托管的关键功能**
+ 处理从后端服务收到的游戏会话放置请求。
+ 根据有关托管资源可用性的实时信息进行放置。
+ 使用玩家延迟数据和其他数据来确定放置选项的优先级（仅限队列）
+ 提示游戏服务器进程启动新的游戏会话。
+ 在游戏会话准备就绪可接受玩家之后，更新游戏会话连接信息。
+ （可选）设置 FlexMatch 对战以创建玩家对战，并为对战请求游戏会话位置。

**由谁构建**  
Amazon GameLift Servers 提供放置系统。您可以通过后端服务发出放置请求的方式，也可以通过设置游戏会话队列和 FlexMatch 对战构建器来配置放置行为。使用Amazon GameLift Servers控制台、 AWS SDK 或为您的游戏创建和配置队列和匹配器。 AWS CLI 

### 游戏托管管理系统
<a name="gamelift-howitworks-components-management"></a>

游戏托管管理系统是协调和监控游戏托管解决方案各个方面的运营支柱。该系统提供了智能和自动化功能，使 Amazon GameLift Servers 的放置和缩放功能得以实现。

**游戏托管的关键功能**
+ 跟踪所有实例集中游戏服务器进程、游戏会话和玩家会话的实时状态和可用性，以支持游戏会话放置和自动容量扩展。
+ 监控实例集的运行状况和性能。
+ 收集和分析游戏托管活动指标。
+ 提供容量扩展工具，包括根据玩家需求和实例集利用率自动扩展。
+ 管理游戏服务器软件和运行时说明的更新。

**由谁构建**
+ 托管实例集：Amazon GameLift Servers 提供可用性跟踪、游戏托管活动和硬件性能指标以及容量扩展工具。您可以使用可用 AWS 工具来管理游戏服务器软件更新、修改运行时说明和自定义指标的使用（例如设置 CloudWatch 监控）。您可以配置自定义扩展策略并根据需要进行修改。
+ Anywhere 实例集：Amazon GameLift Servers 提供可用性跟踪和游戏托管活动指标。您可以管理实例集配置更改，包括游戏服务器软件和运行时说明的更新。您可以创建系统来监控实例集性能并管理实例集容量扩展。

## 这些组件如何协同工作
<a name="gamelift-howitworks-workflow"></a>

**当游戏托管计算部署完成时**
+ **游戏服务器软件已安装**：计算资源上安装了运行时环境和您的游戏服务器生成包
+ **游戏服务器启动**：在计算资源上至少启动了一个带有可选启动参数的游戏服务器可执行文件实例。
+ **游戏服务器连接到 Amazon GameLift Servers**：作为启动操作的一部分，游戏服务器进程调用服务器 SDK 来初始化与服务的连接。
+ **游戏服务器报告已准备好托管游戏会话**：游戏服务器进程完成启动操作，然后调用服务器 SDK 以报告就绪状态。它开始根据其配置报告运行状态。
+ **Amazon GameLift Servers 跟踪可用性**：该服务记录游戏服务器进程对游戏会话放置的可用性。它还会更新实例集、实例和游戏会话的指标，以跟踪使用情况和容量。
+ **游戏服务器等待游戏会话分配**：游戏服务器进程在等待启动游戏会话的提示时保持闲置状态。

**当玩家想要加入游戏时**
+ **玩家启动游戏**：玩家启动您的游戏客户端，使用您的后端服务进行身份验证，并要求加入游戏。
+ **后端服务请求游戏会话**：您的后端服务会根据其玩家分组策略调用 Amazon GameLift Servers，以查找或创建合适的游戏会话。该请求可能包含用于游戏会话的玩家或游戏数据。
+ **Amazon GameLift Servers 放置游戏会话**：开始新的游戏会话时，放置系统会确定托管会话的最佳位置并选择可用的游戏服务器进程。该服务会提示所选进程开始新的游戏会话，并传递任何玩家或游戏数据。如果正在使用 FlexMatch 对战，则对战构建器首先创建对战，然后为对战请求放置。
+ **游戏服务器启动游戏会话**：游戏服务器启动相关步骤以开始游戏会话。完成后，它会向 Amazon GameLift Servers 报告自己已准备好接受玩家连接。
+ **连接信息发送至游戏客户端**：在游戏服务器更新其状态后，Amazon GameLift Servers 提供游戏会话连接信息。后端服务会收到这些信息并将其交付给游戏客户端。
+ **玩家连接到游戏会话**：游戏客户端使用连接信息直接连接到游戏服务器并开始游戏。
+ **Amazon GameLift Servers 监控游戏会话状态**：游戏服务器进程报告运行状况、可选的玩家连接状态和游戏会话状态，以跟踪正在进行的游戏会话可用性。
+ **游戏服务器进程关闭**：游戏服务器进程结束游戏会话，报告状态，然后自行关闭。