借助 Amazon GameLift Servers 托管容器进行托管的开发路线图 - Amazon GameLift Servers

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

借助 Amazon GameLift Servers 托管容器进行托管的开发路线图

本路线图将指导您如何为容器化游戏服务器开发 Amazon GameLift Servers 托管式托管解决方案。托管容器只是 Amazon GameLift Servers 提供的一种托管解决方案。有关托管选项的更多信息,请参阅 Amazon GameLift Servers 游戏托管方案

基于 Amazon GameLift Servers 的托管容器解决方案包含下列组件:

  • 一个包含游戏服务器生成包的容器映像,需上传至 Amazon Elastic Container Registry(Amazon ECR)私有存储库。该游戏服务器生成包需与 Amazon GameLift Servers 的服务器 SDK 集成,且需构建为在 Linux 上运行。

  • 一项后端服务,代表您的游戏客户端与 Amazon GameLift Servers 服务进行交互。该后端服务需使用 Amazon GameLift Servers 的服务 API 中的功能,它是 AWS SDK 的一部分。

  • 一个 Amazon GameLift Servers 游戏会话队列或其他放置机制,负责处理新游戏会话的创建请求,在所有实例集中搜索可用的游戏服务器,并提示游戏服务器启动游戏会话。

  • (可选)一个 FlexMatch 对战构建器,用于创建多人对战并为其设置游戏会话。

  • 一个或多个容器舰队,它们使用亚马逊弹性计算云 (Amazon EC2) 实例,并针对多人游戏托管进行了优化。

本路线图提供了一个简化的路径,让容器化游戏服务器可以通过 Amazon GameLift Servers 托管容器成功启动并运行。准备好必要的组件后,您就可以继续迭代游戏开发并自定义您的托管解决方案。临近发布时,请参阅借助 Amazon GameLift Servers 托管服务,为游戏发布做好准备,帮助您为生产级使用准备托管解决方案。

借助以下托管容器工具加快入门速度:
  • 容器入门工具包可简化集成和实例集设置。它为游戏服务器添加核心游戏会话管理功能,并通过预配置的模板构建容器实例集和游戏服务器的自动化部署管道。部署完成后,可通过 Amazon GameLift Servers 控制台和 API 工具监控实例集性能、管理游戏会话并分析指标。

  • 对于 Unreal Engine 和 Unity 开发人员,可使用 Amazon GameLift Servers 插件在游戏引擎的开发环境内集成游戏服务器并构建容器实例集。该插件提供的引导式工作流程可帮助您借助托管容器创建基于云的快速、简单的托管解决方案。后续可在此基础上扩展,为游戏创建自定义托管方案。

为您的游戏服务器添加功能,使其在为托管进行部署时能与 Amazon GameLift Servers 服务进行通信。

  • 为您的游戏项目获取 Amazon GameLift Servers(5.2 或更高版本)的服务器 SDK。服务器 SDK 支持 C++、C# 和 Go 语言。下载 Amazon GameLift Servers 的服务器 SDK。服务器 SDK 支持 C++、C# 和 Go 语言。

  • 修改游戏服务器代码以添加服务器 SDK 功能。有关指南,请参阅准备使用 Amazon GameLift Servers 托管游戏。至少执行以下操作:

    • 添加代码以初始化 Amazon GameLift Servers SDK 并与Amazon GameLift Servers服务建立 WebSocket连接。使用服务器 SDK 操作 InitSdk()

    • 添加代码,以在服务器进程准备好托管游戏会话时向 Amazon GameLift Servers 服务报告。使用服务器 SDK 操作 ProcessReady()

    • 实现所需的回调函数 OnStartGameSession()OnProcessTerminate()。借助这些函数,游戏服务器进程可以保持与 Amazon GameLift Servers 服务的连接、在 Amazon GameLift Servers 提示时启动游戏会话,以及响应结束游戏服务器进程的请求。

    • 添加代码,以在服务器进程结束游戏会话时向 Amazon GameLift Servers 服务报告。使用服务器 SDK 操作 ProcessEnding()

  • 打包游戏服务器生成包。构建您的游戏服务器以在 Linux 上运行。准备运行游戏服务器所需的生成包和其他文件。如果您要在 Windows 上进行开发,则此步骤可能涉及设置单独的 Linux WorkSpace 或使用适用于 Linux 的 Windows 子系统(WSL)等工具。您需要一种 Linux 环境来测试游戏服务器生成包,以及构建和测试容器映像。

  • 测试游戏服务器集成。确认您的集成游戏服务器可以连接到 Amazon GameLift Servers 服务并对提示做出响应。我们建议设置一个简单的 Amazon GameLift Servers Anywhere 实例集,将本地工作站作为测试主机,如中使用 Amazon GameLift Servers Anywhere 设置本地测试所述。将游戏服务器生成包安装到测试主机上,然后启动服务器进程。使用 AWS CLI 请求新的游戏会话,并验证Amazon GameLift Servers服务是否成功提示您的服务器进程启动游戏会话。

成功集成游戏服务器后,使用游戏服务器可执行文件创建容器映像。将映像存储到 Amazon Elastic Container Registry(Amazon ECR)存储库中以与 Amazon GameLift Servers 搭配使用。有关详细说明,请参阅为 Amazon GameLift Servers 构建容器映像

  • 获取游戏服务器容器的 Dockerfile 模板(由 Amazon GameLift Servers 提供)。修改游戏服务器生成包文件的文件。

  • 构建游戏服务器容器映像。在 Linux 环境中操作时,使用 Docker 工具创建您的映像。

  • 将容器映像推送到 Amazon ECR。在 Amazon ECR 中创建公共或私有存储库,使用该存储库 AWS 账户 以及您计划部署集装箱队列 AWS 区域 的位置。随后将容器映像推送至该存储库。

  • 使用 Anywhere 实例集测试您的容器映像(可选)。在将容器映像部署到云托管的容器实例集之前,您可能需要在本地对其进行测试。您可将现有的 Amazon GameLift Servers Anywhere 实例集与本地工作站搭配使用以进行测试。安装并运行游戏服务器容器后,需验证以下两项内容:(1)Amazon GameLift Servers 服务是否成功提示您的服务器进程启动游戏会话;(2)游戏客户端能否连接到该游戏会话。

到目前为止,您已经使用自管理式 Anywhere 实例集来测试和迭代游戏组件。当您拥有可正常运行且已集成 Amazon GameLift Servers 的游戏服务器生成包后,即可开始设置基于云的 Amazon GameLift Servers 托管式容器实例集托管资源,这些资源是您搭建生产环境所需的核心托管资源。

  • 创建容器组定义。容器组定义用于描述实例集的容器架构,并确定要部署哪些容器映像。请参阅为 Amazon GameLift Servers 容器实例集创建容器组定义。在存储容器镜像的相同 AWS 区域 位置创建容器组定义。有关选择实例集位置的更多信息,请参阅地理位置。至少执行以下操作:

    • 创建游戏服务器容器组定义。

    • 在游戏服务器生成包中添加带有容器映像的容器定义。

    • 为容器的游戏服务器进程配置端口范围。

  • 创建托管式容器实例集。创建实例集时,Amazon GameLift Servers 会立即开始部署游戏服务器生成包进行托管。您可以配置托管式实例集的许多方面。有关指南,请参阅创建 Amazon GameLift Servers 托管式容器实例集。至少执行以下操作:

    • 为集装箱舰队设置 AWS Identity and Access Management (IAM) 服务角色。请参阅为 Amazon GameLift Servers 设置 IAM 服务角色

    • 指定要部署到实例集实例的游戏服务器容器组定义。

    • 对于所有其他参数,如有可用默认值,可直接使用。Amazon GameLift Servers 会计算部分参数以实现最优配置。

  • 将容器实例集添加到队列。在游戏会话队列中,将 Anywhere 测试实例集替换为添加您的托管式容器实例集。

  • 使用容器实例集测试游戏托管。此时您应能对整个解决方案进行测试。启动游戏客户端,并通过后端服务请求游戏会话。获取连接信息后,连接至容器实例集上的游戏会话。

  • 迭代实例集部署。您可以更新容器组定义和实例集配置,然后将更新部署到现有实例集中。

为您的游戏客户端创建一种方法,使其能够请求加入游戏会话、获取连接信息,然后直接连接到托管的游戏会话。最常见的方法是设置后端服务功能,作为游戏客户端和 Amazon GameLift Servers 服务之间的桥梁。此方法可以保护您的托管资源,并让您更好地控制玩家进入游戏会话的方式。

  • 构建用于托管的后端服务功能。后端服务会与 Amazon GameLift Servers 服务通信并向游戏客户端提供连接信息。此功能包括启动游戏会话、将玩家放入游戏以及检索游戏会话信息。有关指南,请参阅准备使用 Amazon GameLift Servers 托管游戏。至少执行以下操作:

  • 向游戏客户端添加允许玩家加入托管游戏会话的功能。游戏客户端将向您的后端服务发出请求,而不是直接向 Amazon GameLift Servers 发出请求。在后端服务提供游戏会话连接信息后,游戏客户端会直接连接到游戏会话来玩游戏。

  • 测试游戏客户端集成。您可将现有的 Amazon GameLift Servers Anywhere 实例集与本地工作站搭配使用以进行测试。使用新的后端服务请求一个新的游戏会话,并验证以下两项内容:(1)Amazon GameLift Servers 服务是否成功提示您的服务器进程启动游戏会话;(2)游戏客户端能否连接到该游戏会话。

您可自定义 Amazon GameLift Servers 处理新游戏会话请求的方式,并找到可用的游戏服务器来托管这些请求。Amazon GameLift Servers 会自动跟踪所有实例集上的所有游戏服务器的可用性。当游戏客户端发送加入游戏会话的请求时,Amazon GameLift Servers 会根据一组已定义的优先级(如最低延迟、成本和可用性)寻找“最佳”放置。

  • 创建游戏会话队列,用于将新的游戏会话与可用的游戏服务器一起放置。队列是游戏会话放置的主要机制。有关指南,请参阅创建游戏会话队列

    • 至少在队列中将您的 Anywhere 实例集添加为目标。所有其他设置都是可选自定义项。

  • 在后端服务代码中,将 CreateGameSession() 调用转换为 StartGameSessionPlacement()请参阅 Create a game session in a multi-location queue

  • 创建一个机制,用于在游戏会话准备好加入时通知游戏客户端。在开发过程中,您可以使用对 DescribeGameSessionPlacement 的调用来轮询游戏会话状态。但是,在使用队列处理大量数据之前,您需要启用事件通知。请参阅请参阅设置游戏会话置放通知。

  • 添加 FlexMatch 对战(可选)。构建对战规则集并创建对战配置以与您的游戏会话队列协同工作。有关设置对战系统的指导,请参阅《Amazon GameLift Servers FlexMatch 开发人员指南》。

  • 测试放置系统。您可将现有的 Amazon GameLift Servers Anywhere 实例集与本地工作站搭配使用以进行测试。使用后端服务请求一个新的游戏会话,并验证 Amazon GameLift Servers 服务是否成功提示您的服务器进程启动游戏会话。

在为游戏发布做准备时,您需要对托管式托管资源进行微调。需要考虑的决策包括: