AddGameLift到您的游戏服务器 - 亚马逊 GameLift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

AddGameLift到您的游戏服务器

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

为游戏服务器进行交互做好准备GameLift,添加GameLift此服务器开发工具包添加到游戏服务器项目并构建此主题介绍的基本功能。服务器开发工具包提供多种语言生成包。请参阅下载亚马逊 GameLift SDK了解有关的更多信息GameLift服务器 SDK。下载最新版本的服务器 SDK.

服务器 SDK API 参考:

初始化服务器进程

此任务是必需的。

添加代码以建立与GameLift并报告服务器进程已准备好托管游戏会话。此代码必须在任何之前运行GameLift-依赖于的代码,例如在启动时。

注意

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

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

  2. NotifyGameLift服务器进程已准备好托管游戏会话。CallProcessReady()(C#) (C++) (Unreal End) 提供以下信息。ProcessReady()每个服务器进程只应调用一次。

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

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

    • 可以由GameLift服务器进程中的服务。您的游戏服务器需要实现这些功能。本主题的其余部分介绍了实施这些功能的说明。另请参阅 ProcessParameters

      • onHealthCheck定期调用(可选)以从服务器进程请求运行状态报告。

      • onStartGameSession(必填)在GameLift服务收到请求以启动新游戏会话 (服务 API)。CreateGame会话 ())。

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

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

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

报表服务器进程健康

此任务是可选的。

添加代码以实现回调函数 onHealthCheck()。此函数由GameLift服务以定期收集来自服务器进程的运行状况指标。服务器进程对运行状况检查的响应是二进制的:“正常” 或 “不正常”。要实现此回调函数,请执行以下操作:

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

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

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

如果你选择不实施运行状况检查回调,GameLift服务会将服务器进程视为正常;如果进程未响应,则将进程视为不正常。

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

启动游戏会话

此任务是必需的。

添加代码以实现回调函数 onStartGameSession。这些区域有:GameLiftservice 调用此方法是为了在服务器进程中触发新的游戏会话,作为游戏会话放置或配对放置活动的一部分。

这些区域有:onStartGameSession函数需要GameSession将对象作为输入参数。该对象包括关键的游戏会话信息,例如最多玩家数,并可能包括游戏数据和玩家数据。函数实现应完成以下任务:

  • 启动操作以创建新游戏会话以根据GameSession属性。游戏服务器至少需要关联游戏会话 ID,游戏客户端在连接到服务器进程时将参考该 ID。

  • 根据需要处理游戏数据和玩家数据。这些数据在GameSession对象,

  • NotifyGameLift当新游戏会话准备好接受玩家时。调用服务器 API 操作ActivateGameSession()(C#) (C++) (Unreal End)。作为对成功调用的响应,GameLift 服务将游戏会话状态更改为 ACTIVE。

验证新玩家

此任务是可选的。

如果您正在跟踪玩家会话状态,请添加代码以在新玩家连接到游戏服务器时验证他们。验证的目的是启用GameLift以跟踪当前玩家和可用的游戏会话插槽。实质上,你的游戏服务器正在验证正在尝试连接的玩家是预订开放式插槽的同一个人。

要进行验证,请求访问游戏会话的游戏客户端必须包含玩家会话 ID。此 ID 由GameLift玩家要求加入游戏时的服务(例如StartGameSessionPlacement()要么StartMatchmaking())。玩家会话在游戏会话中预留一个开放的位置。

当游戏服务器进程收到游戏客户端连接请求时,它会调用AcceptPlayerSession()(C#) (C++) (Unreal End) 使用玩家会话 ID。作为回应,GameLift服务验证玩家会话 ID 对应于游戏会话中保留的打开插槽。在验证玩家会话 ID 后,服务器进程即可接受连接并允许玩家加入游戏会话。如果玩家会话 ID 未通过 GameLift 服务的验证,则服务器进程应拒绝相应的连接。

报告玩家会话结束

此任务是可选的。

如果你正在跟踪玩家会话的状态,请添加代码以通知GameLift在玩家离开游戏会话时提供服务。只要服务器进程检测到断开的连接,此代码就应运行。此通知启用GameLift服务以准确跟踪当前玩家数量和游戏会话中可用的玩家位置。

在处理断开连接的代码中,添加对服务器 API 操作的调用。RemovePlayerSession()(C#) (C++) (Unreal End) 具有相应的玩家会话 ID。

结束游戏会话

此任务是必需的。

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

在进程服务器关闭代码的开头,调用服务器 API 操作。ProcessEnding()(C#) (C++) (Unreal End)。此调用将通知 GameLift 服务,服务器进程正在关闭。收到此通知后,GameLift服务会更改游戏会话状态和服务器进程状态为 TERENATED。呼叫后ProcessEnding(),该进程可以安全地关闭。

响应服务器进程关闭通知

此任务是必需的。

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

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

  • 实现回调函数 onProcessTerminate()。此函数应调用关闭服务器进程的代码。何时GameLift调用此方法,服务器进程通常有几分钟的时间正常断开玩家的链接,保存游戏状态数据和执行其他清理任务。竞价型实例中断提供两分钟的通知。

  • 调用服务器 API 操作GetTerminationTime()(C#) (C++) 来自游戏服务器关闭代码。如果GameLift已发出终止服务器进程的调用,GetTerminationTime()返回预计的终止时间。

  • 在游戏服务器关闭代码的开头,调用服务器 API 操作。ProcessEnding()(C#) (C++) (Unreal End)。此调用将通知 GameLift 服务,服务器进程正在关闭。收到此通知后,GameLift服务会将服务器进程状态更改为 TERMAED。呼叫后ProcessEnding(),该进程可以安全地关闭。