本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用托管容器进行托Amazon GameLift Servers管的开发路线图
此路线图将指导您如何为容器化游戏服务器开发托Amazon GameLift Servers管解决方案。托管容器只是提供的一种托管解决方案Amazon GameLift Servers。有关托管选项的更多信息,请参阅Amazon GameLift Servers 解决方案。
包含的托管容器解决方案包含Amazon GameLift Servers以下组件:
-
一个或多个容器舰队,它们使用针对多人游戏托管进行了优化的亚马逊弹性计算云 (Amazon EC2) 实例。
-
包含您的游戏服务器版本的容器镜像,已上传到亚马逊弹性容器注册表 (Amazon ECR) Container Registry 私有存储库。游戏服务器版本与 Linux 的服务器 SDK 集成,专为Amazon GameLift Servers在 Linux 上运行而构建。
-
代表游戏客户端与Amazon GameLift Servers服务交互的后端服务。后端服务使用作为 AWS 软件开发工具包一部分的服务 API 中的功能。Amazon GameLift Servers
-
一种Amazon GameLift Servers游戏会话队列,用于处理新游戏会话的请求,在所有舰队中搜索可用的游戏服务器,并提示游戏服务器启动游戏会话。
-
(可选)匹配器,用于创建多FlexMatch人比赛并为其设置游戏会话。
该路线图为使用Amazon GameLift Servers托管容器成功启动并运行容器化游戏服务器提供了简化的途径。准备好必要的组件后,您就可以继续迭代游戏开发并自定义您的托管解决方案。临近发布时,请参阅通过Amazon GameLift Servers托管为游戏发布做准备,帮助您为生产级使用准备托管解决方案。
使用这些托管容器工具加快入门速度:
容器入门套件
简化了集成和舰队设置。它为您的游戏服务器添加了基本的游戏会话管理功能,并使用预先配置的模板为游戏服务器构建容器队列和自动部署管道。部署后,使用Amazon GameLift Servers控制台和 API 工具监控队列性能、管理游戏会话和分析指标。 对于虚幻引擎和Unity开发者,使用Amazon GameLift Servers插件
来集成游戏服务器,并从游戏引擎的开发环境中构建容器舰队。该插件的指导式工作流程可帮助您使用托管容器创建快速、简单的解决方案,实现基于云的托管。您可以在此基础上再接再厉,为您的游戏创建自定义托管解决方案。
向游戏服务器添加功能,使其在部署用于托管时可以与Amazon GameLift Servers服务通信。
-
为您的游戏项目获取适用于Amazon GameLift Servers(5.2 或更高版本)的服务器 SDK。服务器 SDK 支持 C++、C# 和 Go 语言。下载适用于的服务器 SDK Amazon GameLift Servers
。服务器 SDK 有 C++、C# 和 Go 版本。 -
修改游戏服务器代码以添加服务器 SDK 功能。有关指南,请参阅将游戏与自定义游戏服务器集成。至少执行以下操作:
-
添加代码以初始化 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 工作区或使用诸如适用于 Linux 的 Windows 子系统 (WSL) 之类的工具。你需要一个 Linux 环境来测试你的游戏服务器版本,以及构建和测试你的容器镜像。
-
测试游戏服务器集成。确认您的集成游戏服务器可以连接到Amazon GameLift Servers服务并响应提示。我们建议设置一个简单的 Amazon GameLift Servers Anywhere 队列,将本地工作站作为测试主机,如中所述使用 Amazon GameLift Servers Anywhere 设置本地测试。将游戏服务器版本安装到测试主机上,然后启动服务器进程。使用 AWS CLI 请求新的游戏会话,并验证Amazon GameLift Servers服务是否成功提示您的服务器进程启动游戏会话。
为您的游戏客户端创建一种方法,使其能够请求加入游戏会话、获取连接信息,然后直接连接到托管的游戏会话。最常见的方法是设置后端服务功能,作为游戏客户端和Amazon GameLift Servers服务之间的中间人。此方法可以保护您的托管资源,并让您更好地控制玩家进入游戏会话的方式。
-
构建用于托管的后端服务功能。后端服务与服务通信并将连接信息提供给游戏客户端。Amazon GameLift Servers此功能包括启动游戏会话、将玩家放入游戏以及检索游戏会话信息。有关指南,请参阅将游戏与自定义游戏服务器集成。至少执行以下操作:
-
获取 AWS 适用的 SDK Amazon GameLift Servers 并将其添加到您的后端服务项目中。请参阅客户端服务的 Amazon GameLift Servers SDK 资源。
-
添加用于初始化Amazon GameLift Servers客户端和存储密钥设置的代码。请参阅在后端服务Amazon GameLift Servers上进行设置。
-
添加调用 AWS SDK 操作
CreateGameSession()
并向游戏客户端提供游戏会话连接信息的功能。请参阅 Create a game session on a specific fleet。调用
CreateGameSession()
是请求新游戏会话的便捷起点。在游戏会话放置系统到位后(参见步骤 3),您需要将此代码替换为调用StartGameSessionPlacement()
(或者StartMatchmaking()
如果您正在使用FlexMatch)。有关设计后端服务的指导,请参阅设计您的游戏客户端服务。
-
-
向游戏客户端添加允许玩家加入托管游戏会话的功能。游戏客户端向你的后端服务发出请求,而不是直接向后端服务发出请求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 ServersFlexMatch开发者指南。
-
测试安置系统。您可以将现有的 Amazon GameLift Servers Anywhere 队列与本地工作站一起使用进行测试。使用后端服务请求新的游戏会话,并验证该Amazon GameLift Servers服务是否成功提示您的服务器进程启动游戏会话。
成功集成游戏服务器后,使用游戏服务器可执行文件创建容器镜像。将其存储在亚马逊弹性容器注册表 (Amazon ECR) Container Registry 存储库中以供使用。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容器组定义。在存储容器镜像的相同 AWS 区域 位置创建容器组定义。有关选择实例集位置的更多信息,请参阅实例集位置。至少执行以下操作:
-
创建游戏服务器容器组定义。
-
在游戏服务器版本中添加带有容器镜像的容器定义。
-
为容器的游戏服务器进程配置端口范围。
-
-
创建托管集装箱舰队。创建队列后,Amazon GameLift Servers会立即开始部署游戏服务器版本进行托管。您可以配置托管式实例集的许多方面。有关指南,请参阅创建一个 Amazon GameLift Servers 托管集装箱船队。至少执行以下操作:
-
为容器舰队设置 AWS Identity and Access Management (IAM) 服务角色。请参阅为设置 IAM 服务角色 Amazon GameLift Servers。
-
指定要部署到舰队实例的游戏服务器容器组定义。
-
如果所有其他参数都可用,则使用默认值。 Amazon GameLift Servers计算一些参数以实现最佳配置。
-
-
将集装箱舰队添加到您的队列中。在游戏会话队列中,将 Anywhere 测试队列替换为托管容器队列。
-
使用您的集装箱舰队测试游戏托管。此时您应该能够测试整个解决方案。启动游戏客户端并通过后端服务请求游戏会话。获取连接信息并连接到集装箱舰队的游戏会话。
-
迭代您的舰队部署。您可以更新容器组定义和队列配置,然后将更新部署到现有舰队。
在为游戏发布做准备时,您需要对托管式托管资源进行微调。需要考虑的决策包括:
-
优化您的集装箱船队配置。请参阅自定义Amazon GameLift Servers集装箱舰队。
考虑添加竞价型实例集以节省成本。请参阅教程:使用竞价型实例创建Amazon GameLift Servers队列。
-
如果您的游戏服务器需要通信其他 AWS 资源,请设置 IAM 角色来管理访问权限。请参阅与舰队中的其他 AWS 资源进行沟通。
确定要将游戏服务器放置在哪个地理位置。将偏远位置添加到您的托管式实例集。请参阅自定义你的 Amazon GameLift Servers EC2 托管车队。
试验适用于托管式实例集的游戏会话放置选项,包括自定义优先级设置。请参阅自定义游戏会话队列。
-
设置自动容量扩展以满足预期的玩家需求。请参阅通过以下方式扩展游戏托管容量 Amazon GameLift Servers。
-
在其他队列中创建队列, AWS 区域 并根据需要修改队列和 auto Scaling 以处理故障转移。
-
设置托管可观测性工具,包括分析和日志记录。请参阅监控 Amazon GameLift Servers。
-
使用基础设施即代码 (IaC) 自动部署车队。请参阅管理 Amazon GameLift Servers 使用托管资源 AWS CloudFormation。
Amazon GameLift Servers支持将 AWS CloudFormation 模板用于任何特定于部署的配置。您也可以使用 AWS Cloud Development Kit (AWS CDK) 来定义您的Amazon GameLift Servers资源。有关更多信息 AWS CDK,请参阅《AWS Cloud Development Kit (AWS CDK) 开发人员指南》。
要管理 AWS CloudFormation 堆栈的部署,我们建议使用持续集成和持续交付 (CI/CD) 工具和服务,例如。 AWS CodePipeline这些工具可以帮助您在构建游戏服务器二进制文件时自动部署或在获得批准的情况下进行部署。使用 CI/CD 工具或服务,新游戏服务器版本的资源部署可能如下所示:
-
构建和测试游戏服务器二进制文件。
-
将二进制文件上传到Amazon GameLift Servers。
-
部署具有新生成包的新实例集。
-
将新实例集添加到游戏会话队列,并删除具有先前生成包版本的实例集。
-
当使用先前版本的舰队不再托管活跃的游戏会话时,请删除这些舰 AWS CloudFormation 队的堆栈。
-