在 GameLift 队组上运行多个进程 - Amazon GameLift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

在 GameLift 队组上运行多个进程

您可以设置队组的运行时配置,以便对每个实例运行多个进程。根据您配置队组的方式,运行多个进程可以帮助您更有效地使用托管资源,并可能降低总体托管成本。

队组如何管理多个进程

GameLift 使用队组的运行时配置来确定要在队组中的每个实例上运行的进程的类型和数量。运行时配置至少必须定义一个服务器进程配置以指定游戏服务器可执行文件。您还可以定义其他服务器进程配置,以运行与您的游戏相关的其他类型的进程。每个服务器进程配置都包含以下信息:

  • 游戏生成包中可执行文件的文件名和路径。

  • 运行可执行文件以并发维护的进程数。

  • (可选)要在启动时传递给进程的参数。

当队组中的实例启动时,它会立即启动在运行时配置中定义的服务器进程。对于多个进程,每个进程的启动时间错开了几秒钟,因此具有多个进程的实例可能需要几分钟才能达到最大容量。进程具有有限的生命周期。当它们终止时,实例会不断地启动新进程,以维持在当前运行时配置中定义的正确数量和类型的服务器进程。

您可以随时通过添加、更改或删除服务器进程配置来更改运行时配置。每个实例都会定期检查对队组运行时配置的更新,以确保快速实施更改。此处介绍 GameLift 如何采纳运行时配置更改。

  1. 在实例检查它是否在运行正确类型和数量的服务器进程之前,它向 GameLift 服务发送请求以获取最新版本的运行时配置。

  2. 实例根据最新运行时配置检查其活动的进程,并按如下所示处理更新:

    • 如果更新的运行时配置删除了某个服务器进程类型:此类型的活动服务器进程将继续运行直到结束,并且在终止时不会被替换。

    • 如果更新的运行时配置减少了某个服务器进程类型的并发进程数:此类型的多余服务器进程将继续运行直到结束,并且在终止时不会被替换。

    • 如果更新的运行时配置添加了新的服务器进程类型或增加了现有类型的并发进程:新服务器进程将立即启动,直至达到实例上服务器进程的 GameLift 最大值。在这种情况下,新服务器进程仅在现有进程结束时才启动。

针对多个流程优化队组

您必须至少执行以下操作来启用多个进程:

  • 创建生成包,其中包含您要部署到队组并上传到 GameLift 的所有游戏服务器可执行文件。生成包中的所有游戏服务器必须运行在同一个平台上,并且使用 GameLift Server SDK for C++ 版本 3.0.7 或更高版本与 GameLift 集成。

  • 使用一个或多个服务器进程配置和多个并发进程创建运行时配置。

  • 连接到此队组上托管的游戏的游戏客户端必须使用 AWS SDK版本 2016-08-04 或更高版本进行集成。

此外,请遵循以下游戏服务器集成建议来优化队组性能:

  • 处理服务器进程关闭方案,以确保 GameLift 可以高效率地回收进程。否则,服务器进程将不会关闭直到它们失败,并且运行时配置更新的实施速度可能很慢。

    • 向调用服务器 API ProcessEnding() 的游戏服务器代码添加关闭过程。

    • 在您的游戏服务器代码中实现回调函数 OnProcessTerminate() 以正常处理来自 GameLift 的终止请求。

  • 确保运行状况不正常的服务器进程已关闭并快速重新启动。定义“运行状况正常”和“运行状况不正常”对您的游戏的含义,并让每个进程保持正常运行状况。您可以通过在游戏服务器代码中实现 OnHealthCheck() 回调函数来将此状态回报给 GameLift。GameLift 自动关闭连续三次均报告为运行状况不正常的服务器进程。如果不实施 OnHealthCheck(),GameLift 假定服务器进程正常运行,除非该进程无法响应通信。因此,性能不佳的服务器进程可以继续存在,用尽资源,直到它们最终失败。

选择每个实例的进程数

在决定要在实例上运行的并发进程数时,需要记住三个限制:

  • GameLift 限制每个实例的最大并发进程数。不论您的运行时配置指定了一个还是多个服务器进程配置,队组的服务器进程配置的所有并发进程数总和不能超过此限制。

  • 您选择的 Amazon EC2 实例类型可能会限制可并发运行以维持可接受的性能水平的进程数。您需要测试游戏的不同配置以找出您首选实例类型的最佳进程数。影响选择的因素包括游戏服务器的资源要求、每个游戏会话中要托管的玩家数以及玩家性能预期。

  • 更改队组的运行时配置时,请记住 GameLift 从不运行超出所配置总数的并发进程。这意味着,从旧运行时配置转换到新配置可能是逐渐发生的,并且只在现有进程结束后才会启动新进程。例如,假设您可以将队组配置为运行服务器可执行文件 myGame.exe 的 10 个并发进程,同时启动参数设置为 "-loglevel=1"。您更新配置,继续运行 myGame.exe 的 10 个并发进程,但将启动参数更改为 "-loglevel=4"。因为队组中的实例已经运行 10 个进程,所以,在使用旧启动参数的进程结束之前,每个实例都无法启动使用新启动参数的进程。