添加 GameLift 到游戏服务器 - Amazon GameLift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

添加 GameLift 到游戏服务器

您的自定义游戏服务器需要与 GameLift 服务部署并运行后 GameLift 实例。每个游戏服务器进程必须能够在事件由 GameLift 服务。它还必须保留 GameLift 通知服务器进程状态和(可选)播放器连接。有关游戏服务器、游戏客户端和 GameLift 服务协同管理游戏托管,请参阅 GameLift 和游戏客户端/服务器交互.

准备游戏服务器与进行交互 GameLift,添加 GameLift 服务器SDK连接到您的游戏服务器项目,并构建本主题中描述的基本功能。服务器SDK提供多种语言版本。见 GameLift SDKs 详细了解 GameLift 服务器SDK。下载最新版本的服务器SDK.

服务器SDKAPI参考:

初始化服务器进程

此任务是必需的。

添加代码以与 GameLift 服务并报告服务器进程已准备好主持游戏会话。此代码必须在任何 GameLift-依赖代码,例如启动时。

注意

服务器API操作的名称在所有可用语言中相同。

  1. 初始化 GameLift 通过调用API客户端 InitSdk().

  2. 通知 GameLift 服务器进程已准备好主持游戏会话。呼叫 ProcessReady() (货号)(C++(C++))(不真实)和以下信息。ProcessReady() 每个服务器进程只能调用一次。

    • 服务器进程使用的端口号。向游戏客户端提供端口号和IP地址,以便它们可以连接到服务器进程以加入游戏会话。

    • 您想要的文件的位置,例如游戏会话日志 GameLift 以保留。这些是游戏会话期间由服务器进程生成的文件。它们暂时存储在服务器进程正在运行的实例中,并且在实例关闭时丢失。此处列出的任何文件都将上传到 GameLift 服务。您可以通过 GameLift 控制台 或致电 GameLift 服务API GetGameSessionLogUrl()(GetGameSessionLogUrl())(GetGameSessionLogUrl()). 提示 如果您的编队被配置为每个实例运行多个并发服务器进程,请考虑使用唯一标识游戏会话的文件命名方案。

    • 可由调用的回叫函数的名称 GameLift 服务器进程中的服务。您的游戏服务器需要实现这些功能。本主题的其余部分介绍了如何实现这些功能的说明。另请参阅 ProcessParameters

      • onHealthCheck (可选)定期呼叫,以从服务器进程请求运行状况报告。

      • onStartGameSession (必填)在 GameLift 服务接收启动新游戏会话的请求(服务API) 创建游戏会话())。

      • 当 GameLift 服务需要强制服务器进程终止时,将调用 onProcessTerminate(必需),以允许服务器进程正常关闭。

      • 当 GameLift 服务向游戏服务器交付更新后的游戏会话对象或根据对战回填请求提供状态更新时,将调用 onUpdateGameSession(可选)。如果您使用 FlexMatch 回填 功能;详细了解匹配回填 更新游戏服务器上的对战数据.

    您可以设置游戏服务器以安全地访问您拥有或控制的AWS资源。了解有关如何与来自车队的其他AWS资源通信的更多信息。

报告服务器进程运行状况

此任务是可选的。

添加代码以执行回呼功能 onHealthCheck()。此函数由 GameLift 服务,定期从服务器进程收集健康度量标准。服务器进程对运行状况检查的响应是二进制的:健康或不健康。要执行此回叫功能,请执行以下操作:

  • 使用对您游戏有用的任何方式来评估服务器进程的状态。例如,如果任何外部依赖项失败,或者内存容量等指标低于定义的限制,您可将服务器进程报告为不正常。

  • 完成运行状况评估并在 60 秒内响应回调。如果 GameLift 服务未在该时间内收到响应,它会自动将服务器进程视为不正常。

  • 返回布尔值:true 表示正常,false 表示不正常。

如果您选择不执行运行状况检查回叫, GameLift 服务认为服务器进程是健康的,除非进程没有响应,在这种情况下,它被视为不健康。

服务器进程运行状况由 GameLift 用来有效地结束不正常进程和释放资源。如果某个服务器进程在三次连续的运行状况检查中持续报告不正常或不响应,GameLift 服务可能会关闭该进程然后启动新进程。可以在 GameLift 控制台上收集和查看队组的服务器进程运行状况指标。

开始游戏会话

此任务是必需的。

添加代码以执行回呼功能 onStartGameSession。的 GameLift 服务调用此方法,以便在服务器进程中触发新的游戏会话,作为游戏会话放置或匹配放置活动的一部分。

onStartGameSession 功能需要 游戏会话 对象作为输入参数。此对象包括关键游戏会话信息,例如最大玩家数,并且可以包括游戏数据和玩家数据。功能实现应完成以下任务:

  • 启动操作,以基于 GameSession 属性。游戏服务器至少需要关联游戏会话ID,当连接到服务器进程时,哪个游戏客户端将引用。

  • 根据需要处理游戏数据和玩家数据。此数据位于 GameSession 对象、

  • 通知 GameLift 当新游戏会话准备接受玩家时。调用服务器API操作 ActivateGameSession() (货号)(C++(C++))(不真实)。作为对成功调用的响应,GameLift 服务将游戏会话状态更改为 ACTIVE。

验证新播放器

此任务是可选的。

如果您正在跟踪玩家会话的状态,请添加代码以通过 GameLift 服务。接受播放器连接之前,新播放器尝试连接到服务器进程时,应运行此代码。播放器验证启用 GameLift 在游戏会话中跟踪当前玩家和可用插槽。

来自游戏客户端的连接请求包括播放器会话ID。此ID由 GameLift 当游戏客户要求加入游戏会话时(例如 StartGameSession放置()创建层会话()),用于在游戏会话中保留玩家插槽,并返回到游戏客户端。收到游戏客户端连接请求后,服务器将处理呼叫 AcceptPlayerSession() (货号)(C++(C++))(不真实)和播放器会话ID。 GameLift 验证游戏客户端在游戏会话中保留了玩家插槽。

验证播放器会话ID后, GameLift服务器进程可接受连接并允许播放器加入游戏会话。如果玩家会话 ID 未通过 GameLift 服务的验证,则服务器进程应拒绝相应的连接。

报告玩家会话结束

此任务是可选的。

如果您正在跟踪玩家会话状态,请添加代码以通知 GameLift 服务。只要服务器进程检测到断开的连接,此代码就应运行。此通知允许 GameLift 服务,以准确跟踪游戏会话中的当前玩家和可用插槽。

在处理断开连接的代码中,将呼叫添加到服务器API操作 RemovePlayerSession() (货号)(C++(C++))(不真实)和相应的播放器会话ID。

结束游戏会话

此任务是必需的。

添加代码,以在游戏会话结束时通知 GameLift 服务。最佳做法是,一旦完成游戏会话,服务器进程将关闭,以便回收和刷新托管资源。此代码应添加到服务器进程关闭序列。

在进程服务器关闭代码开始时,调用服务器API操作 ProcessEnding() (货号)(C++(C++))(不真实)。此调用将通知 GameLift 服务,服务器进程正在关闭。收到此通知后, GameLift 服务将游戏会话状态和服务器进程状态更改为“已终止”。呼叫后 ProcessEnding(),关闭过程是安全的。

响应服务器进程关闭通知

此任务是必需的。

添加代码以响应于来自的通知而关闭服务器进程 GameLift 服务。 GameLift 当报告服务器进程始终不健康时,或者服务器进程正在运行的实例正在终止时,会发送此通知。实例可能作为容量缩减事件的一部分或响应Spot实例中断而终止。

对游戏服务器代码进行以下更改以处理关闭通知:

  • 实现回调功能 onProcessTerminate()。此功能应调用关闭服务器进程的代码。何时 GameLift 调用此方法,服务器进程通常有几分钟的时间以优雅地断开播放器、保留游戏状态数据以及执行其他清理任务。点实例中断提供两分钟通知。

  • 调用服务器API操作 GetTerminationTime() (货号)(C++(C++))从游戏服务器关闭代码。如果 GameLift 已发出终止服务器进程的呼叫, GetTerminationTime() 返回估计的终止时间。

  • 在游戏服务器关闭代码开始时,调用服务器API操作 ProcessEnding() (货号)(C++(C++))(不真实)。此调用将通知 GameLift 服务,服务器进程正在关闭。收到此通知后, GameLift 服务将服务器进程状态更改为“已终止”。呼叫后 ProcessEnding(),关闭过程是安全的。