本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用包装器快速入Amazon GameLift Servers门
欢迎来到的入门教程。Amazon GameLift Servers在本教程中,您将快速部署游戏服务器以托管在基于云的计算资源队列上。使用本教程可以跳过将服务器 SDK 集成Amazon GameLift Servers到游戏代码中的工作,而是使用最少的功能来部署游戏,以便与Amazon GameLift Servers服务通信和运行游戏会话。您将设置一个基本的托管解决方案,并使用它来体验全方位的功能,例如自动扩展和配对。这也是将游戏原型作为现场演示的一部分或用于测试的好方法。
这种入职方法的主要优点:
-
快速部署您的游戏服务器以便快速托管。
-
游戏代码零更改,无需修改。
-
无论使用哪种游戏引擎,均可将此方法用于任何游戏可执行文件。
-
探索所有Amazon GameLift Servers管理工具,包括监控游戏会话活动和主机运行状况。
注意
包装纸用于评估和基本生产用途。诸如详细的玩家会话管理之类的高级功能需要完整的服务器 SDK 集成。
先决条件
在开始之前,请确保您满足以下条件:
-
Amazon Web Services 账户 具有适当权限的
-
Amazon CLI 已安装
-
Go 1.18+
-
多人游戏服务器可执行文件
-
Make (Linux/Mac)
-
Git 安装时有一个活跃的帐户
概览
在本教程中,你将:
-
获取并构建包装器
-
准备游戏构建
-
配置包装器
-
上传游戏服务器版本
-
创建托管 EC2 舰队
-
创建并连接到游戏会话
-
监控和管理您的游戏服务器
-
扩展您的游戏服务器
第 1 步:获取并构建游戏服务器封装器
使用以下命令获取游戏服务器包装器源代码并构建包装器。这些命令使用 SSH,但你也可以直接访问 Github 存储库。
Windows
> git clone git@github.com:amazon-gamelift/amazon-gamelift-servers-game-server-wrapper.git > cd amazon-gamelift-servers-game-server-wrapper > powershell -file .\build.ps1
Mac 和 Linux
$ git clone git@github.com:amazon-gamelift/amazon-gamelift-servers-game-server-wrapper.git $ cd amazon-gamelift-servers-game-server-wrapper $ make
成功构建后,会向中添加一个 “out” 目录amazon-gamelift-servers-game-server-wrapper
。此目录中有三个文件夹,每个文件夹对应一个支持的托管队列选项,其中包含一组构建工件。在本教程中,您将部署到托管 EC2 队列,因此您将使用该文件夹gamelift-servers-managed-ec2
。
第 2 步:准备游戏服务器版本
在此步骤中,您将准备好要上传到的游戏服务器编译文件Amazon GameLift Servers。
创建游戏目录
现在,在本地计算机上准备一个游戏目录。此目录必须包含运行游戏服务器所需的所有文件Amazon GameLift Servers。这包括游戏服务器包装器、您的游戏服务器版本以及使包装器与您的游戏服务器配合使用的 config.yaml。
使用以下步骤:
-
托管 EC2 车队。在游戏服务器包装器输出文件夹中,找到用于部署到托管 EC2 队列的构建工件。该版本将写入输出目录,如下所示:
out\linux\amd64\gamelift-servers-managed-ec2
. -
将您的游戏服务器可执行文件及其运行所需的所有关联文件复制到该
gamelift-servers-managed-ec2
文件夹。您可以根据需要设置嵌套目录。
示例目录结构将如下所示:
gamelift-servers-managed-ec2 │-- config.yaml │-- amazon-gamelift-servers-game-server-wrapper │-- MyGame │ │-- server-executable.exe │ │-- my-game-settings │ │ ......
步骤 3:为您的队列配置包装器
Amazon GameLift Servers管理队列计算实例的生命周期,在安装服务器版本的情况下启动新实例,并根据需要回收实例。该服务管理在每个实例上运行的游戏服务器进程生命周期。托管 EC2 舰队可以在多个地点拥有实例,无论玩家身在何处,都能为他们提供支持。
编辑 config.yaml 文件以配置用于日志、端口设置和服务器初始化的包装器。
-
配置日志设置。游戏服务器包装器为每个游戏服务器进程生成日志消息。默认情况下,日志级别设置为调试以实现最大详细程度。这在设置和故障排除过程中非常有用,它决定了日志消息的详细程度,在本例中是最详细的。选项包括调试、信息、警告和错误(最少冗长)。
-
指定游戏服务器日志目录的路径。游戏服务器日志的默认路径是
./game-server-logs
。此目录包含游戏服务器生成的所有日志,每个实例都有这些日志。日志会自动上传到可通过 “事件” 选项卡访问它们Amazon GameLift Servers的位置。有关更多详细信息,请查看 “故障排除” 部分。 -
定义网络端口配置。将游戏端口设置为任何你喜欢的端口。在本教程中,请仅指定一个端口,因为您将创建一个队列,每个实例仅运行一个并发游戏服务器进程。如果您决定一次运行多个进程,则需要为每个并发进程配置足够的端口。如配置文件所示,默认值为 37016,但通常,对于使用 Linux 版本的队列,使用端口 22 和 1026-60000。对于使用 Windows 版本的舰队,请使用端口 1026-60000。
-
设置游戏服务器可执行文件的路径。用于
./MyGame/my-server-executable.exe
使用游戏服务器可执行文件的实际名称和位置自定义其路径。这是启动游戏服务器的入口点。 -
配置游戏服务器参数。至少指定一个-port 参数,并使用之前定义的相同游戏端口值。“pos” 值 0 表示这是第一个参数。根据需要添加其他参数。这些参数将在游戏服务器启动时传递给它,从而允许您配置其运行时行为。
-
论点:
"--port"
-
值:
"{{.port number here}}"
-
位置:
0
(列表中的第一个参数)
-
示例配置:
log-config: wrapper-log-level: debug game-server-logs-dir: ./game-server-logs ports: gamePort: 37016 game-server-details: executable-file-path: ./MyGame/my-server-executable game-server-args: - arg: "--port" val: "{{.gameport}}" pos: 0
第 4 步:上传游戏服务器版本
现在,您已经完成了游戏服务器版本的所有必需元素(游戏服务器包装器、config.yaml 和游戏服务器文件),并且可以将游戏版本上传到托管了。Amazon GameLift Servers上传游戏版本的最快方法是使用 Amazon CLI 命令,upload-build
如以下示例所示。
使用 Windows 上传游戏版本:
aws gamelift upload-build \ --name gamelift-test-2025-03-11-1 \ --build-version gamelift-test-2025-03-11-1 \ --build-root out/windows/amd64/gamelift-servers-managed-ec2 \ --operating-system WINDOWS_2016 \ --server-sdk-version 5.3.0 \ --region us-west-2
注意
对于 Mac 和 Linux 版本,请使用操作系统 AMAZON_LINUX_2023
创建版本时,记录 API 响应中的构建 ID 以将其用于队列创建。
步骤 5:创建托管 EC2 舰队
以下步骤描述了最小的队列配置,因此您可以尽快启动并运行。
要创建您的舰队,请执行以下操作:
-
登录 Amazon Web Services Management Console 并导航至Amazon GameLift Servers。
-
在控制台窗口顶部的菜单栏上,检查您的版本位于哪个区域。请记下来,因为您的舰队必须位于同一区域,否则您将无法找到或选择自己的版本。
-
在导航窗格的 “托管” EC2 部分中,选择 “生成”。
-
选择您之前上传的版本以显示版本详情页面。
-
在 “舰队” 部分中,选择 “创建舰队”,这将显示 “定义托管 EC2 舰队” 详细信息页面,您可以从中跟踪舰队的状态以及在 “事件” 选项卡上查看舰队创建事件。
-
填写名称和描述,然后选择下一步。
-
在定义实例详细信息页面中,默认显示版本的区域。选择您要添加的任何其他区域。
-
对于舰队类型,请选择按需。
-
在实例类型下,选择 c5.large,然后选择下一步。
-
在 “运行时配置” 下,由于您上传的游戏版本使用包装器,因此您需要改为指向包装器可执行文件。对于 Windows 游戏服务器来说,这是
C:\game\amazon-gamelift-servers-game-server-wrapper.exe
。对于 Linux 游戏服务器来说,这是/local/game/amazon-gamelift-servers-game-server-wrapper
。例如:
LaunchPath": "/local/game/amazon-gamelift-servers-game-server-wrapper", "ConcurrentExecutions": 1, "Parameters": "—port 37016
此外,使用允许在
config.yaml
和运行时配置启动参数中设置的端口的范围来配置游戏端口值。中的端口config.yaml
不必与队列的运行时配置中指定的端口相匹配,但是在运行时,如果配置指定了不同的端口,则该值将config.yaml
覆盖中的值。在运行时配置中输入的启动参数也会覆盖中的启动参数config.yaml
。 在查看并创建页面上,仔细检查所有配置,然后选择提交以创建您的队列。舰队状态将随着游戏服务器托管容量的增加而发生变化,并且很快就会显示为 “活动” 状态。激活完成并部署舰队后,该服务会启动包装器,准备接收游戏会话请求。
第 6 步:创建并连接到游戏会话
当您的舰队状态显示为 “活动” 时,这意味着游戏服务器已准备就绪,正在等待托管游戏会话。要开始游戏会话,请向Amazon GameLift Servers服务提出游戏会话请求。在这里,您将使用 Amazon CLI 来提出此请求。
注意
请记住,使用创建游戏会话对于测试和熟悉该过程非常有用。 Amazon CLI 在某个时候,你会将编程 Amazon SDK 调用添加到游戏后端服务中,作为游戏配对或游戏会话放置系统的一部分。
使用以下内容创建游戏会话:
aws gamelift create-game-session \ --fleet-id <FLEET_ID> \ --game-properties '[{"Key": "exampleProperty", "Value": "exampleValue"}]' \ --maximum-player-session-count 3 \ --region us-west-2
您也可以将自定义的游戏属性传递给服务器可执行文件。详情请参阅自述文件中的游戏服务器参数。当它接到 create-game-session呼叫时,会Amazon GameLift Servers通知包装器启动游戏服务器可执行文件并启动游戏会话。里面的内容config.yaml
会影响游戏服务器的配置,而控制台中设置的启动参数决定了游戏会话本身的配置。
添加游戏属性的格式示例:
defaultArgs: - arg: "--port" val: "{{.GamePort}}" pos: 0 - arg: "--ipAddress" val: "{{.IpAddress}}" pos: 1 - arg: "--gameSessionId" val: "{{.GameSessionId}}" pos: 2
第 7 步:管理和监控您的车队
现在,您的游戏服务器队列已设置完毕并启动了游戏会话,您可以从Amazon GameLift Servers控制台对其进行管理和监控。实现此目的的最佳方法是访问舰队详细信息页面,您可以在其中编辑队列详细信息或在 “扩展” 选项卡上更改队列扩展和容量。请参阅以下有关扩展游戏服务器的部分。
选择 “指标” 选项卡可查看描述监控活动和硬件指标的图表。有关指标图表的详细信息,请选择您的车队 ID 旁边的信息链接。此外,虽然您可以通过 “指标” 选项卡密切监控游戏服务器,但也可以在 CloudWatch 控制面板中为这些指标添加警报。
要从控制台导航到 CloudWatch 仪表板,请执行以下操作:
-
在搜索栏中键入 CloudWatch “”,然后从搜索结果列表中选择它以显示 CloudWatch 概览。
-
向下滚动并选择 “查看 GameLift 控制面板”,查看基于舰队和游戏会话关键指标的图表。
第 8 步:扩展游戏服务器
在下一步中,您将设置自动缩放。借助 auto scaling,您可以根据游戏服务器活动动态扩展舰队容量。当玩家到达并开始游戏会话时,auto Scaling 会添加更多实例,而随着玩家需求的减少,auto scaling 会释放未使用的实例。这是一种有效的方法,可以最大限度地减少托管资源和成本,同时还能提供流畅、快速的玩家体验。
在为游戏发布做准备时,您需要为队列设置自动缩放。建议将自动缩放作为最大限度地减少托管资源和成本的有效方法,同时还能提供流畅、快速的玩家体验。
手动设置车队容量
手动设置车队容量
-
前往队列详细信息页面的 “扩展” 选项卡。
-
选择一个位置并选择 “编辑”。
-
更改 “所需实例” 值并更改 “最小值” 和 “最大大小” 设置,以超出其当前值。
注意
使用最大实例数设置作为权宜之计,以防止过度扩展和成本。
-
选择确认。
使用基于目标的 auto 缩放
使用基于目标的 auto 缩放
基于目标的自动缩放(目标跟踪)将舰队缩放与可用游戏会话的百分比联系起来。当玩家激增玩你的游戏并且可用游戏会话减少时,它会通过自动向队列添加更多实例来做出响应。
-
在基于目标的 auto Scaling 策略下,选择添加策略,然后将队列的容量设置为在达到您设置的可用游戏会话百分比的阈值时自动更改。较大的缓冲区可以更好地应对激增,让新玩家快速进入游戏,但也可能导致更高的托管成本。
-
选择 “确认” 以接受更改。
基于规则的 auto Scaling 可为您提供更精细的控制,例如能够将扩展与其他队列指标关联起来,并设置自定义阈值和扩展响应。它提供了强大的选项,但它还需要使用 CLI 和大量测试来了解自定义规则的实际运行情况。本教程重点介绍如何首先设置基于目标的方法。
常见问题故障排除
以下是您在运行游戏服务器和游戏会话时可能遇到的常见问题。当服务器或游戏会话无法正常运行时,第一步是检查日志,这些日志可能会发现新部署或生产中的游戏存在以下问题之一。
日志中经常显示以下内容:
-
游戏服务器进程无法启动。这可能是包装器配置中的错误——请验证文件的启动路径是否正确,启动参数和参数是否正确。
-
游戏服务器版本无法运行。这可能是游戏代码中的错误。
-
玩家无法连接到游戏会话。这可能是端口配置错误。
-
连接延迟或缓慢。查看扩展策略和阈值。
-
没有连接。验证您的舰队的端口规则和配置。
查看您的Amazon GameLift Servers舰队的事件日志
查看您的Amazon GameLift Servers舰队的事件日志
-
打开 Amazon GameLift Servers 控制台。
-
在舰队详细信息页面上,选择事件选项卡并下载日志。您还可以从 “指标” 选项卡监控活动和硬件指标,以了解游戏服务器运行状况和游戏会话激活情况。
查看游戏会话日志
查看游戏会话日志
-
在主机上,打开您的舰队并打开 “游戏会话” 选项卡。
-
从列表中选择游戏会话 ID 以显示其概述页面。
-
选择 “下载日志”,在本地下载日志文件。
要使用 CLI 查看游戏会话日志,请使用 GetGameSessionLogURL
API。 Amazon GameLift Servers自动将日志存储 14 天。
您还可以为您的舰队配置 Amazon CloudWatch 日志。这提供了额外的日志记录功能以及与其他 Amazon 监控服务的集成。
通过 CloudWatch以下方式实时访问日志或延长保留期:
-
在Amazon GameLift Servers控制台仪表板顶部的搜索栏中键入 CloudWatch “”,然后从结果下拉列表中进行选择。
-
转到 CloudWatch 日志组并搜索特定会话。最简单的方法是单击 “全部搜索”,然后使用 gameSessionId 或 clientID 进行筛选。