Amazon GameLift FlexMatch 的工作原理 - Amazon GameLift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon GameLift FlexMatch 的工作原理

本主题概述了 GameLift FlexMatch 服务,包括 FlexMatch 系统的核心组件及其交互方式。

您可以将 FlexMatch 与使用 GameLift 托管托管的游戏或使用其他托管解决方案的游戏一起使用。在 GameLift 服务器上托管的游戏(包括实时服务器)使用集成的 GameLift 服务自动定位可用的游戏服务器并启动比赛的游戏会话。使用 FlexMatch 作为独立服务的游戏(包括 GameLift FFleetIQ)必须与现有托管系统协调,以分配托管资源并启动比赛的游戏会话。

有关为游戏设置 FlexMatch 的详细指导,请参阅开始使用 FlexMatch

对战组件

FlexMatch 对战系统包括以下部分或全部组件。

GameLift 组件

这些是 GameLift 资源,用于控制 FlexMatch 服务如何为您的游戏执行匹配。它们是使用 GameLift 工具创建和维护的,包括控制台和AmazonCLI,或者通过编程方式使用Amazon适用于 GameLift 的软件开发工具包。

  • FlexMatch 匹配配配置(也称为匹配者)— 匹配者是一组配置值,用于为您的游戏自定义匹配过程。一个游戏可具有多个对战构建器,每个对战构建器根据需要配置不同的游戏模式或体验。当您的游戏向 FlexMatch 发送匹配请求时,它会指定要使用哪个匹配人。

  • FlexMatch 对战规则集— 规则集包含评估玩家的潜在比赛以及批准或拒绝所需的所有信息。规则集定义比赛的团队结构,声明用于评估的球员属性,并提供描述可接受匹配条件的规则。规则可适用于单个玩家、团队或整个对战。例如,某个规则可能需要对战玩家选择相同的游戏地图,或者它可能需要所有团队具有相似的玩家技能平均值。

  • GameLift 会话队列(仅适用于具有 GameLift 管理托管的 FlexMatch)— 游戏会话队列向说明可用的托管资源,并为对战游戏启动新的游戏会话。该队列的配置确定 GameLift 在何处查找可用托管资源,以及如何为对战选择最佳可用主机。

自定义组件

以下组件包含完整的 FlexMatch 系统所需的功能,您必须根据游戏的体系结构实现这些功能。

  • 用于匹配的播放器界面— 此界面允许玩家加入比赛。至少,它通过客户端匹配服务组件启动匹配请求,并根据匹配流程的需要提供玩家特定的数据,如技能级别和延迟数据。

    注意

    作为最佳做法,与 FlexMatch 服务的通信应由后端服务完成,而不是来自游戏客户端。

  • 客户对战服务— 此服务将播放器界面中的玩家加入请求字段,生成匹配请求,并将其发送到 FlexMatch 服务。对于处理中的请求,它会监视匹配事件,跟踪匹配状态,并根据需要采取操作。根据您在游戏中管理游戏会话托管的方式,此服务可能会将游戏会话连接信息返回给玩家。此组件使用Amazon软件开发工具包,用于与 GameLift FlexMatch 服务进行通信。

  • 匹配放置服务(仅适用于 FlexMatch 作为独立服务)— 此组件与您现有的游戏托管系统配合使用,以查找可用的托管资源并启动新的比赛会话。组件必须获得匹配结果并提取开始新游戏会话所需的信息,包括球员 ID、属性和比赛中所有球员的团队分配。

FlexMatch 对战流程

本主题介绍一个基本的匹配方案以及各种游戏组件与 FlexMatch 服务之间的交互。

请求玩家对战

使用您的游戏客户端的玩家点击 “加入游戏” 按钮。此操作会导致您的客户端匹配服务向 FlexMatch 发送匹配请求。请求标识了在满足请求时使用的 FlexMatch 匹配器。该请求还包括您的自定义匹配者所需的玩家信息,例如技能水平、游戏首选项或地理延迟数据。您可以为一个玩家或多个玩家提出匹配请求。

将请求添加到匹配池

当 FlexMatch 收到匹配请求时,它会生成一个匹配票证并将其添加到匹配人的票证池中。票证将保留在池中,直到它获得匹配或达到最大时间限制。您的客户匹配服务会定期收到关于匹配事件的通知,包括票证状态的变化。

构建对战

您的 FlexMatch 匹配者会持续对其池中的所有票证运行以下流程:

  1. 匹配者按票龄对游泳池进行排序,然后开始建立一个潜在的比赛从最早的门票开始。

  2. 匹配者向潜在匹配添加第二个票证,并根据您的自定义匹配规则评估结果。如果潜在的比赛通过评估,票证的球员将被分配到一个球队。

  3. 匹配者按顺序添加下一个票证并重复评估过程。当所有玩家插槽填满后,比赛就准备好了。

大型比赛(41 至 200 名玩家)的匹配使用上述过程的修改版本,以便它能够在合理的时间范围内建立匹配。匹配者不是单独评估每个票证,而是将预先排序的票证池划分为潜在匹配,然后根据您指定的玩家特征平衡每场比赛。例如,匹配者可能会根据类似的低延迟位置对门票进行预排序,然后使用赛后平衡来确保球队根据球员技能均匀匹配。

报告对战结果

找到可接受的匹配项后,将更新所有匹配的票证,并为每个匹配的票证生成一个成功的匹配事件。

  • FlexMatch 作为一个独立服务:您的游戏会在成功的匹配赛事中收到比赛结果。结果数据包括所有对战玩家及其团队分配的列表。如果您的比赛请求包含玩家延迟信息,则结果还会建议比赛的最佳地理位置。

  • 带有 GameLift 托管解决方案的 FlexMatch:匹配结果会自动传递给 GameLift 队列以进行游戏会话放置。匹配者决定哪个队列用于游戏会话放置。

开始比赛的游戏会话

建议的比赛成功形成后,将开始一个新的游戏会话。在为比赛设置游戏会话时,您的游戏服务器必须能够使用匹配结果数据,包括玩家 ID 和团队分配。

  • FlexMatch 作为一个独立服务:您的自定义比赛放置服务从成功的匹配事件中获取比赛结果数据,并连接到现有的游戏会话放置系统,以查找比赛的可用托管资源。找到托管资源后,匹配放置服务与现有托管系统协调,以启动新的游戏会话并获取连接信息。

  • 带有 GameLift 托管解决方案的 FlexMatch:游戏会话队列会为游戏找到最佳可用游戏服务器。根据队列的配置方式,它会尝试将游戏会话放置成本最低的资源以及玩家在哪里会遇到低延迟(如果提供了玩家延迟数据)。成功放置游戏会话后,GameLift 服务会提示游戏服务器启动新的游戏会话,传递匹配结果和其他可选的游戏数据。

将玩家 Connect 到比赛

开始游戏会话后,玩家会连接到会话,声称他们的团队分配,然后开始玩游戏。

  • FlexMatch 作为一个独立服务:您的游戏使用现有的游戏会话管理系统向玩家提供连接信息。

  • 带有 GameLift 托管解决方案的 FlexMatch:在成功放置游戏会话时,FlexMatch 会使用游戏会话连接信息和玩家会话 ID 更新所有匹配的门票。