Amazon GameLift 和游戏客户端服务器的互动 - Amazon GameLift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon GameLift 和游戏客户端服务器的互动

本主题描述了游戏客户端、后端服务、游戏服务器和 Amazon GameLift 之间的交互。

下图说明了游戏客户端、后端服务、Amazon GameLift 软件开发工具包、托管 EC2 游戏服务器、Amazon GameLift 服务器软件开发工具包和 Amazon GameLift 之间的交互。有关所示交互的详细描述,请参阅本页的以下部分。

以下各节中列出的用例的游戏客户端/服务器交互。

初始化游戏服务器

以下步骤描述了在准备游戏服务器以托管游戏会话时发生的互动。

  1. Amazon GameLift 在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上启动服务器可执行文件。

  2. 游戏服务器调用:

    1. InitSDK() 初始化服务器软件开发工具包。

    2. ProcessReady() 告知游戏会话就绪性、连接信息以及游戏会话日志文件的位置。

    然后,服务器进程会等待 Amazon GameLift 的回调。

  3. Amazon GameLift 会将服务器进程的状态更新为 ACTIVE 以启用游戏会话放置。

  4. Amazon GameLift 开始调用回调 onHealthCheck,并在服务器进程处于活动状态时继续定期调用回调。服务器进程可以在一分钟内报告运行状况是否正常。

创建游戏会话

初始化游戏服务器后,当您创建游戏会话来托管玩家时,会发生以下互动。

  1. 后端服务调用软件开发工具包操作 StartGameSessionPlacement()

  2. Amazon GameLift 会创建一个带有 PENDING 状态的 GameSessionPlacement 新票证并将其返回给后端服务。

  3. 后端服务从队列中获取放置票证状态。有关更多信息,请参阅请参阅设置游戏会话置放通知。

  4. Amazon GameLift 通过选择合适的实例集并在包含 0 游戏会话的队列中搜索活动服务器进程来开始放置游戏会话。当 Amazon GameLift 找到服务器进程时,Amazon GameLift 会执行以下操作:

    1. 使用游戏会话设置和来自放置请求的玩家数据创建具有 ACTIVATING 状态的 GameSession 对象。

    2. 调用服务器进程的 onStartGameSession 回调。Amazon GameLift GameSession 向对象传递信息,表明服务器进程可以设置游戏会话。

    3. 将服务器进程的游戏会话数更改为 1

  5. 服务器进程运行 onStartGameSession 回调函数。当准备好接受玩家连接时,服务器进程将调用 ActivateGameSession() 并等待玩家连接。

  6. Amazon GameLift 使用服务器进程的连接信息更新 GameSession 对象。(此信息包括报告为 ProcessReady() 的端口设置。) Amazon GameLift 也将状态更改为 ACTIVE

  7. 后端服务调用 DescribeGameSessionPlacement() 以检测更新的票证状态。然后,后端服务使用连接信息将游戏客户端连接到服务器进程并加入游戏会话。

向游戏中添加玩家

此序列描述了向现有游戏会话中添加玩家的过程。玩家会话也可以作为游戏会话放置请求的一部分进行请求。

  1. 后端服务使用游戏会话 ID 调用客户端 API CreatePlayerSession() 操作。

  2. Amazon GameLift 检查游戏会话状态(必须为 ACTIVE)并在游戏会话中查找开放的玩家位置。如果有可用位置,Amazon GameLift 将执行以下操作:

    1. 创建新的 PlayerSession 对象并将其状态设置为 RESERVED

    2. 使用 PlayerSession 对象响应后端服务请求。

  3. 后端服务使用玩家会话 ID 直接将游戏客户端连接到服务器进程。

  4. 服务器调用服务器 API 操作 AcceptPlayerSession() 来验证玩家会话 ID。如果通过验证,则 Amazon GameLift 会将 PlayerSession 对象传递到服务器进程。服务器进程接受或拒绝连接。

  5. Amazon GameLift 会执行以下操作之一:

    1. 如果连接被接受,则 Amazon GameLift 会将 PlayerSession 状态设置为 ACTIVE

    2. 如果后端服务器的原始 CreatePlayerSession() 调用在 60 秒内未收到响应,Amazon GameLift 状态 PlayerSession 将改为 TIMEDOUT 并重新开放游戏会话中的玩家位置。

移除玩家

将玩家从游戏会话中移除以为新玩家的加入创造空间时,会发生以下互动。

  1. 玩家断开了与游戏的连接。

  2. 服务器检测丢失的连接并调用服务器 API 操作RemovePlayerSession()

  3. Amazon GameLift 在游戏会话中将 PlayerSession 状态更改为 COMPLETED 并重新打开玩家位置。

关闭游戏会话

当服务器进程关闭当前游戏会话时,就会发生这种交互序列。

  1. 服务器关闭游戏会话和服务器。

  2. 服务器调用 Amazon GameLift 的 ProcessEnding()

  3. Amazon GameLift 会执行以下操作:

    1. 将游戏会话日志上传到 Amazon Simple Storage Service (Amazon S3)。

    2. 将状态 GameSession 变为 TERMINATED

    3. 更改服务器进程状态为 TERMINATED

    4. 回收实例资源。