Amazon GameLift
开发人员指南 (版本 )
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Amazon GameLift FlexMatch 的工作原理

本主题介绍核心 FlexMatch 组件以及 FlexMatch 如何处理对战请求。有关在游戏中添加 FlexMatch 的详细帮助,包括如何设置对战构建器和自定义玩家匹配的信息,请参阅使用 FlexMatch 对战

Amazon GameLift FlexMatch 需要以下三个关键组件协同工作:

  • 用于触发玩家对战的机制。 一种机制确定何时启动玩家对战。第二种机制 (可选) 确定何时为现有对战中的空位置查找新玩家 (回填)。将对战请求和对战回填请求交给对战构建器处理。

  • FlexMatch 对战构建器将评估玩家并创建对战。 对战构建器将通过它收到的请求构建可能最佳的玩家对战。它有一个规则集来定义对战的团队结构并设置评估玩家是否对战时要使用的条件。一个游戏可具有多个对战构建器,每个对战构建器构建不同类型的对战。

  • 用于放置新对战的游戏会话队列。 游戏会话队列将查找可用的计算资源来托管对战。它确定在何处 (哪些区域) 查找资源以及如何为每个对战选择最佳的可用主机。

以下各节详述了对战如何继续构建新的游戏对战或为现有游戏对战查找新玩家。

对战请求

下面介绍了如何使用 FlexMatch 处理新游戏对战的请求。此描述假设客户端游戏服务将启动对战请求并跟踪对战票证状态。

  1. 请求对战。玩家可在您的游戏中采取某种操作来触发对战,如单击“立即加入”按钮或一组玩家组队。您的游戏将启动对战请求,标识要使用的对战构建器并包括要对战的一个或多个玩家。此请求包括对战构建器构建对战所需的任何玩家信息 (如技能水平或首选项)。每个请求都将获得一个对战票证 ID,您的游戏将使用此 ID 跟踪请求状态并根据需要采取操作。

  2. 发现潜在对战。 所有对战票证都将传递到指定的对战构建器并放置在票证池中进行处理。票证将保留在票证池中,直至它获得匹配或达到对战构建器的最大时间限制。

    为查找匹配的玩家,对战构建器将持续通过票证池。在每次通过中,对战构建器将从池中最旧的票证开始并针对它评估其他票证以查找最佳可取的匹配。对战构建器的规则集确定 (1) 要为对战创建多少个团队,(2) 要为每个团队分配多少个玩家以及 (3) 如何评估每个潜在玩家。规则可能会针对单个玩家、团队或对战设置要求。例如,一个规则可能需要所有对战玩家具有某种才能,或者它可能需要团队中至少有一位玩家担任特定角色。一个常用规则是要求所有对战玩家都具有相似的技能评级。

    当对战构建器评估票证时,它将根据规则通过或否决票证。对于具有多个玩家的票证,对战构建器假设这些玩家需要一起游戏并且尝试将它们放入同一个对战中。这意味着,对于任何潜在对战,票证中的所有玩家必须是可接受的。如果任何玩家不符合任何规则,则整个票证都将被视为非对战项。失败的票证将留在票证池中并在下一次通过时再次评估。一旦填充了潜在对战,将更新对战中所有票证的状态。

  3. 获取玩家接受。如果对战构建器要求玩家接受潜在对战,在每个玩家接受之前,FlexMatch 不能继续匹配。对战票证状态将进行更改以指示需要接受,这将提示您的游戏请求每个对战票证中的所有玩家接受。

    玩家可以选择接受或拒绝潜在对战。您的游戏将收集玩家响应并将响应报告给 FlexMatch。潜在对战中的所有玩家必须在特定时间限制内接受对战才能继续。如果任何玩家拒绝对战或未能在时间限制之前响应,则对战构建器将放弃潜在对战。已接受对战的玩家的票证将返回到对战构建器的票证池中;未接受对战的玩家的票证将变为失败状态,并且不会再进行处理。

  4. 查找资源以托管对战。在进行并接受潜在对战之后,FlexMatch 将尝试使用可用托管资源放置对战。对战构建器配置为使用特定游戏会话队列,它会将潜在对战传递到该队列以进行放置。该队列将使用一组规则在区域和队组中搜索最佳可用服务器进程来托管对战。如果原始对战请求包含玩家延迟数据,则队列将使用此信息查找为对战中的玩家提供最低延迟和最一致的游戏体验的资源。

    在找到可用服务器进程之后,Amazon GameLift 将使用游戏属性和对战构建器数据创建游戏会话记录,其中包括团队结构和大小、玩家分配以及相关玩家特征。

  5. 启动新的游戏会话。 与启动任何新的游戏会话时一样,Amazon GameLift 将向服务器进程发送启动请求以及游戏会话和对战构建器信息。服务器进程将采用此信息并使用它为已对战的游戏启动新的游戏会话。当游戏会话准备好接受玩家时,服务器进程将通知 Amazon GameLift。

  6. 将玩家连接到新的游戏会话。 在游戏会话准备好接受玩家之后,Amazon GameLift 将为对战中的每个玩家创建新的玩家会话。然后它将更新所有对战票证,同时将票证状态更新为指示成功并添加所有玩家的连接信息。此票证状态更改将提示您的游戏将连接信息中继到游戏客户端。玩家现在可以加入游戏并声明其在对战和团队分配中的位置。

回填请求

下面介绍了如何使用 FlexMatch 为现有对战查找新玩家。由于对战回填需要有关游戏会话中玩家位置可用性的最新信息,因此我们建议从游戏服务器发起对战回填请求。另一个选项是使用客户端游戏服务 (如跟踪游戏会话和玩家活动的会话目录服务)。在 利用 FlexMatch 回填现有游戏 处查看有关向游戏添加对战回填功能的更多信息。

  1. 请求回填对战。 已对战游戏具有需填充的空玩家位置。您的游戏将发起回填请求,同时标识要使用的对战构建器并描述游戏会话中的当前玩家。每个请求都具有一个对战票证 ID,您的游戏将使用此 ID 跟踪请求状态并根据需要采取操作。

  2. 发现潜在对战。 用于回填的对战票证将传递给指定的对战构建器并与新对战的票证放置在同一个池中。无论玩家是在查找对战还是当前已在一个要填充的对战中,对战构建器对于玩家的评估基本相同。唯一的例外是,潜在对战不能有多个回填票证。

    回填票证必须与至少一个其他票证对战才能成功完成,即使在对战构建器的规则允许对战使用空玩家位置完成时也是如此。一旦填充潜在对战,将更新对战中所有票证的状态。

  3. 获取玩家接受。 如果需要接受,则只有新玩家需要接受回填对战,并且将按照有关对战请求的规定执行此步骤。当前玩家无需接受其已加入的对战。因此,即使回填请求的票证状态指示需要接受,您的游戏也不需要采取操作。

    如果建议的任何新玩家在时间限制内未能接受对战,将放弃潜在的对战并且不会向现有对战添加任何新玩家。在这种情况下,回填请求的票证将返回到票证池进行处理。

  4. 使用新的对战数据更新现有游戏会话。 如果回填对战成功,则无需安排新的游戏会话。相反,Amazon GameLift 将更新现有游戏会话的对战数据,并添加新玩家和团队分配。Amazon GameLift 将更新后的游戏会话信息发送到托管现有游戏的服务器进程。

  5. 将新玩家连接到现有游戏会话。 Amazon GameLift 将为新玩家创建玩家会话并使用当前状态、玩家会话和连接信息来更新对战票证。跟踪新玩家票证状态的客户端游戏服务会将连接信息中继到游戏客户端。玩家现在可以加入现有游戏并声明其玩家位置。

本页内容: