本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon GameLift Servers Anywhere 托管的开发路线图
此路线图将指导您如何为多人游戏开发托管解决方案,以便与自己的资源(本地硬件或虚拟机)一起使用。 Amazon GameLift Servers提供了多种游戏托管选项;有关这些选项的更多信息,请参阅Amazon GameLift Servers 解决方案。
使用 Amazon GameLift Servers Anywhere 托管,您的游戏服务器托管在您提供和管理的计算资源上。无论玩家身在何处,您都可以创建具有所需配置的 Anywhere 舰队。 Amazon GameLift Servers为 Anywhere 舰队提供以下功能:
-
根据您的配置为您处理游戏会话放置流程,包括:
-
跟踪 Anywhere 实例集中游戏服务器的可用性。
-
处理来自游戏客户端服务的游戏请求,并将游戏请求与可用服务器进行匹配。
-
提示 Anywhere 实例集上的游戏服务器启动游戏会话。
-
将连接详细信息传回游戏客户端。
-
-
收集会话放置流程的性能指标以及游戏会话和玩家的使用情况指标。
-
支持完整的FlexMatch配对功能集,因此您可以构建匹配器并将其与游戏会话放置系统集成。
-
提供Amazon GameLift Servers代理来处理 Anywhere 队列上的关键主机管理任务。
-
支持与Amazon GameLift Servers托管车队相结合,打造灵活的混合解决方案。
Amazon GameLift ServersAnywhere 解决方案由以下组件组成:
-
一个或多个 Amazon GameLift Servers Anywhere 舰队使用您的本地或其他托管资源,使用您现有的配置管理和部署工具进行管理。(您可以选择使用 AWS Systems Manager。)
-
与服务器 SDK 集成的游戏服务器版本Amazon GameLift Servers,用于在所有舰队中部署。
-
与 AWS SDK 集成的游戏客户端和后端服务,用于与Amazon GameLift Servers服务交互并请求游戏会话。
-
用于在所有舰Amazon GameLift Servers队中使用可用游戏服务器放置新游戏会话的队列。
-
(可选)匹配器,用于创建多FlexMatch人比赛并为其设置游戏会话。
该路线图提供了一个简化的途径,让你的多人游戏通过 Amazon GameLift Servers Anywhere 托管成功启动和运行。准备好必要的组件后,您就可以继续迭代游戏开发并自定义您的托管解决方案。临近发布时,请参阅通过Amazon GameLift Servers托管为游戏发布做准备,帮助您为生产级使用准备托管解决方案。
使用适用于虚幻引擎和Unity的Amazon GameLift Servers插件快速入门
要加快部署速度,请尝试使用适用于虚幻引擎和Unity的Amazon GameLift Servers插件
向游戏服务器添加功能,使其在部署用于托管时可以与Amazon GameLift Servers服务通信。
-
为您的游戏项目获取适用于 Amazon GameLift Servers(版本 5.x)的服务器 SDK。服务器 SDK 支持 C++、C# 和 Go 语言。下载Amazon GameLift Servers服务器 SDK
。 -
修改游戏服务器代码以添加服务器 SDK 功能。有关指南,请参阅将游戏与自定义游戏服务器集成。至少执行以下操作:
-
添加代码以初始化 Amazon GameLift Servers SDK 并与Amazon GameLift Servers服务建立 WebSocket连接。使用服务器 SDK 操作
InitSdk()
并加入 Anywhere 实例集所需的服务器参数。 -
添加代码,以便在服务器进程准备好托管游戏会话时向Amazon GameLift Servers服务报告。使用服务器 SDK 操作
ProcessReady()
。 -
实现所需的回调函数
OnProcessTerminate()
,以及OnStartGameSession()
。借助这些功能,游戏服务器进程可以与Amazon GameLift Servers服务保持连接,在出现提示时启动游戏会话Amazon GameLift Servers,并响应提示结束游戏服务器进程。 -
添加代码,以便在服务器进程结束游戏会话时向Amazon GameLift Servers服务报告。使用服务器 SDK 操作
ProcessEnding()
。
-
-
打包游戏服务器生成包。使用生成包文件、依赖项和支持软件创建安装脚本。请参阅打包游戏生成包文件。我们建议使用 Amazon Simple Storage Service(Amazon S3)存储桶来存储游戏生成包的版本。
-
测试游戏服务器集成。对于此任务,我们建议为本地工作站设置 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 队列与本地工作站一起使用进行测试。
自定义处理新游戏会话请求的方式,并找到可用的游戏服务器来托管这些请求。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开发者指南。
到目前为止,您一直在使用本地设备(注册为 Anywhere 队列计算)来测试和迭代游戏组件。下一步是设置生产系统所需的实例集类型。对于这些资源,请使用Amazon GameLift Servers代理来管理一些关键的计算机主机管理任务。有关更多详细信息,请参阅 与Amazon GameLift Servers代理合作。
-
获取Amazon GameLift Servers代理并将其添加到您的游戏服务器安装包中。获取并编译代理源代码,该源代码位于 Github Amazon GameLift Servers 代理存储库
中。将生成的 JAR 文件可执行文件放在与游戏生成包可执行文件相同的目录中。 -
根据需要修改代理的启动脚本。确保在计算开始运行后立即启动代理可执行文件。如需获取在托管计算上安装和运行代理方面的帮助,请参阅代理存储库中的自述文件。启动命令应至少包含用于指定 Anywhere 实例集 ID、 AWS 区域、自定义位置和计算名称的选项。
代理会自动为您处理以下任务,因此,如果您一直使用脚本处理这些任务,则可以将脚本删除:
-
调用
RegisterCompute()
,将计算添加到 Anywhere 实例集。 -
GetComputeAuthToken()
在游戏服务器连接到Amazon GameLift Servers服务时调用对其进行身份验证。代理负责管理身份验证令牌的获取和刷新,在计算上运行的所有游戏服务器进程都可以使用该令牌。 -
根据一组运行时指令在计算上启动新的服务器进程。
-
-
为 Anywhere 实例集中的计算创建运行时配置。您可以使用Amazon GameLift Servers控制台或 AWS CLI 来创建或修改队列的运行时指令。代理执行这些指示,并定期向Amazon GameLift Servers服务请求更新。
-
根据需要设置或修改游戏会话队列。创建新队列(或更新现有队列)以使用与Amazon GameLift Servers代理一起部署的 Anywhere 队列。
-
测试代理与 Anywhere 实例集的集成。检查代理是否根据运行时配置正确启动服务器进程。
在为游戏发布做准备时,您需要对托管式托管资源进行微调。需要考虑的决策包括:
-
根据需要自动启动和关闭计算,包括安装和运行游戏服务器软件。回收计算有助于确保计算定期更新,而关闭不需要的计算则可以节约成本。
-
如果您的游戏服务器需要与其他 AWS 资源进行通信,请设置 IAM 角色来管理访问权限。请参阅与舰队中的其他 AWS 资源进行沟通。
-
确定要将游戏服务器放置在哪个地理位置。将偏远位置添加到您的托管式实例集。请参阅自定义你的 Amazon GameLift Servers EC2 托管车队。
-
通过选择计算资源配置来优化实例集性能,然后配置运行时指令,使每个计算运行最优数量的服务器进程。
-
试验适用于托管式实例集的游戏会话放置选项,包括自定义优先级设置。请参阅自定义游戏会话队列。
-
创建处理手动或自动容量扩展的机制,以满足预期的玩家需求。考虑哪些因素会促使系统增加或减少可用于托管游戏会话的计算数量。
-
根据需要设计并实施到其他资源的失效转移。
-
设置托管可观测性工具,包括分析和日志记录。请参阅监控 Amazon GameLift Servers。