merge匹配系统

快速开始 Matchmaking 并探索各种类型的示例场景。

基于对战的游戏中的匹配系统通常旨在:

  • 找到其他玩家 基于诸如区域、延迟、技术水平或游戏参数等条件;

  • 搜索服务器 根据可用容量[或延迟、区域、技术水平、地图、模式]加入;

  • 启动新服务器 如果现有服务器已满或不满足玩家条件。

玩家体验至上,定义我们的核心目标:

  • 高对局填充率和社交功能整合(与好友组队游戏),

  • 快速匹配且控制匹配质量(低延迟、共享偏好),

  • 可靠且可预测的匹配流程并具有全球可用性。

circle-check

观看此视频以开始使用我们的 Matchmaker 服务:

✔️ 准备工作

测试此服务完全免费,无需信用卡。

免费额度允许在我们的共享测试集群上每次重启后最多运行 3 小时。

本教程假设您已:

Matchmaking 架构

本指南将重点介绍 Matchmaking API 和 Backfill API.

当涉及匹配时,有四(4)个重要的数据流:

  1. Matchmaking API 由游戏客户端用于与 Matchmaker 通信:

    1. 用于组管理、服务器分配和监控,

    2. 用于与 的延迟测量, 添加并更新了示例请求/响应,.

  2. 部署 API 被 Matchmaker 用于部署、扩展和管理你的专用服务器。

  3. Netcode 传输 用于在游戏客户端和专用服务器之间进行通信。

  4. 深入解析 从服务器替换或添加更多玩家。

circle-info

发布后, 你的 matchmaker 需要全天候运行 以确保全球各地的玩家可以加入服务器。

🍀 简单示例

从一个简单示例开始并测试基本的匹配玩家流程:

  • 在共享上创建 matchmaker 实例 深入解析,

  • 在你的 matchmaker 中定义规则和设置 深入解析,

  • 使用 管理和测试玩家流程与票据 📗 API.

1. 在免费层上设置

☑️ 注册你的免费 Edgegap 帐户arrow-up-right 并打开 Matchmaker 仪表板页面arrow-up-right.

☑️ 点击 创建 Matchmaker 首先,然后输入:

  • matchmaker 名称 - 供你自己参考,例如 quickstart-dev ,

  • 上传我们的简单示例 JSON 配置。

🍀 简单示例(最小推荐配置):

triangle-exclamation

故障排除和常见问题:

chevron-right应用配置对于配置文件 XYZ 无效。hashtag
chevron-right标签为 '2024.01.30-16.23.00-UTC' 的 Docker 镜像未被缓存。hashtag

🌟 升级到按需付费等级arrow-up-right 以解锁 具有缓存的即时部署.

  • 4GB 以上未缓存的镜像可能需要更长时间部署,导致 部署。请考虑优化您的服务器镜像大小(虚幻引擎 / Unity).

  • 您仍然可以继续,但我们建议测试您的部署时间。

☑️ 如果没有出现验证错误,点击 创建并启动 并等待该过程完成。这将导致一个新的免费集群启动,并运行你的简单示例 matchmaker。

✅ 你现在可以继续下一步。

2. 探索配置

随着我们对 Matchmaker 发布更新,每个新版本使用 语义化版本控制 通过解析格式清楚传达变更的影响 major.minor.patch:

  • 🔥 主版本(major) 包括破坏性更改并需要集成审查,

  • 🌟 次版本(minor) 包括大量向后兼容的改进,

  • 🩹 补丁(patch) 包含错误修复和小幅改进。

检查票据(Inspect tickets) 以更好地理解和调试开发中可能的匹配流程。我们建议为你的线上 matchmaker 禁用 inspect API。

一些 部署可能会导致错误. 我们尝试通过最多重试部署来解决此问题,次数为 max_deployment_retry_count 次(自动进行,无需客户端确认)。

为确保意外的客户端崩溃或被遗弃的票据不会长时间占用你的 matchmaker 资源,票据将在 ticket_expiration_period 之后被取消,导致其状态变为 CANCELLED 然后在 ticket_removal_period .

之后被永久删除。 ,删除所有票据并导致短暂停机。我们匹配逻辑的核心在于配置于 应用与版本 。每个配置文件都是完全隔离的匹配队列,指向

规则 并具有预定义的所需 CPU 和内存(RAM)资源量。

  • 初始规则集中必须满足的条件以将玩家分组在一起,每个规则由三个属性定义: 你选择的名称,例如 -,

  • 匹配大小 规则类型,也称为运算符,例如 -,

  • player_count 最后是运算符属性,例如 team_count .

max_team_size

玩家计数规则

  • 最后是运算符属性,例如 这是一个特殊规则,定义需要多少玩家匹配以启动分配:

  • 指的是队伍数量,1 支队伍可用于合作或混战模式, min_team_size

  • 指的是每队的最小玩家数量。

指的是每队的最大玩家数量。

circle-exclamation

在你的初始配置规则中。

延迟 是一条优化玩家匹配 ping 的特殊规则:

  • 通过移除高延迟(超过阈值)的区域来降低客户端-服务器延迟,

  • 通过将延迟相似(差值之下)的玩家分组来提高匹配公平性。

chevron-right规则示例: 信标hashtag

信标 规则配置为 "difference": 100, "max_latency": 200 将匹配:

Alice 和 Bob 可能匹配:

  • 东京 被丢弃(>200 毫秒),

  • 芝加哥 的延迟在绝对差值 100 毫秒内。

信标 城市
匹配
abs(A - B) [毫秒]
Alice [毫秒]
Bob [毫秒]

芝加哥

75.0

12.3

87.3

洛杉矶

113.2

145.6

32.4

东京

不适用

不适用

233.2

253.2

Alice 和 Charlie 永远不会匹配:

  • 没有信标对两位玩家的延迟均 < 200 毫秒,

  • Alice 居住在北美 - 伊利诺伊州,

  • Charlie 居住在亚洲 - 日本。

信标 城市
匹配
abs(A - B) [毫秒]
Alice [毫秒]
Charlie [毫秒]

芝加哥

不适用

不适用

12.3

215.6

洛杉矶

不适用

不适用

145.6

238.3

东京

不适用

不适用

233.2

24.2

circle-exclamation

✅ 你现在可以继续下一步。

延迟规则(Latencies Rule)

3. 查看实例详情

  • ☑️ 在你的 matchmaker 初始化后,在我们的仪表板中查看其详细信息: 状态

  • 表示服务健康状况,可能为 ONLINE、OFFLINE 或 ERROR。 标识符

  • 可帮助 Edgegap 员工在你需要排查问题时快速找到你的 matchmaker。 启动时间

  • 可用于跟踪最近更新时间。 大小 对应于我们的其中一个arrow-up-right.

  • 定价层(Pricing Tiers) API URL

  • 将被游戏客户端和游戏服务器用于与你的 matchmaker 通信。 Swagger URL

  • 是我们提供的一个方便的 openAPI 规范 GUI,用于探索 API 模式。 Auth Token

triangle-exclamation

Edgegap 员工永远不会索取你的令牌。如果你怀疑安全泄露,请重新生成令牌。 要测试你新的 matchmaker,.

✅ 你现在可以继续下一步。

circle-info

你将需要 Swagger URL、API URL 和 Auth Token

circle-check

用于线上游戏和零停机更新。

circle-info

4. 测试 Tickets API 请在启动 matchmaker 后等待最多 5 分钟,

以允许 DNS 传播完成。 ☑️ 首先, 打开你的 Swagger URL

☑️ 点击 在 swagger GUI 中检查你的 openAPI 模式: 授权 是我们提供的一个方便的 openAPI 规范 GUI,用于探索 API 模式。🔒,粘贴你的 在 swagger GUI 中检查你的 openAPI 模式:.

,然后点击确认 ☑️ 向下滚动到 票据 API- POST /tickets ,展开并点击.

尝试一下(Try it out)

  • ☑️ 预览你的请求: 注意 player_ip 设置为 null 服务器到服务器 - 这将导致 Matchmaker 使用自动添加到你请求中的 IP 地址(参见

  • 以获得替代方案), profile ,删除所有票据并导致短暂停机。,

  • 指的是你的 attributes 包含你的 matchmaker 规则的值,在本例中为 延迟(latencies)

    • 规则, 规则类型,也称为运算符,例如 - rule

是唯一一个在玩家票据中不需要任何属性的规则。 ☑️ 点击 执行(Execute)

  • 并查看对你的玩家票据请求的响应: id

  • 以获得替代方案), 是你唯一的匹配票据 ID,请保存以便稍后检查你的票据, ,删除所有票据并导致短暂停机。,

  • 确认所选的 group_id 是分配给每张票据的唯一,

  • 组 ID,单人玩家表示为 1 人的组 team_id 是在达到 TEAM_FOUND

  • 注意 每个队伍可以包含多个组,但不得超过配置的队伍大小

  • 是玩家解析出的公网 IP 地址,无论使用何种识别方法, assignment 设置为 被设置为

  • 以指示票据尚未匹配或分配到服务器, created_at

  • 提供有关玩家票据何时创建的信息,可用于游戏 UI, status 表示票据的当前状态,所有票据都以 .

SEARCHING ☑️ 点击 ☑️ 通过再次点击创建第二张票据

,以便我们的两名玩家匹配并启动服务器。 ☑️ 收起 POST /tickets 并打开GET /tickets/{ticketId} ,展开并点击.

,然后点击 ☑️ 点击.

☑️ 在上一步响应中输入票据 ID 并点击

  • ☑️ 检查玩家票据的更新分配: 状态更改为 MATCH_FOUND 是玩家解析出的公网 IP 地址,无论使用何种识别方法, player_ip 设置为 首先,同时保持

是唯一一个在玩家票据中不需要任何属性的规则。 ☑️ 点击 以指示玩家已匹配且正在分配服务器,

  • ☑️ 检查玩家票据的更新分配: 再次检查你的票据,并查看票据的更新分配: HOST_ASSIGNED 是玩家解析出的公网 IP 地址,无论使用何种识别方法, 并且

chevron-right包含了分配服务器的详细信息。hashtag

故障排除与常见问题 表示票据的当前状态,所有票据都以 .

  • 我的票据卡在


请验证你是否创建了足够数量且条件重叠且符合你配置的票据。 状态更改为是在达到 我的票据在不断地在

  • 之间切换。


免费层帐户一次仅限 1 个部署。请考虑升级或停止当前部署以启动新的部署。 CANCELLED.

  • 我的票据直接进入


你的票据已达到其过期时间。重新创建新票据或在配置中增加过期时间以进行测试。

  • 我在检查我的票据时收到 HTTP 404 未找到。

☑️ 你的票据已被 DELETE 请求移除,或因达到其移除期而被移除(在票据过期后开始,定义在你的配置中)。重新创建新票据或在配置中增加过期/移除周期以进行测试。arrow-up-right:

  • 在我们的仪表板中检查你新的部署

在找到匹配后几秒钟,匹配过程会继续到 如果玩家已被匹配并分配到游戏服务器,他们的票据会被自动删除。在 表示你的 部署现在已就绪并且你的游戏服务器正在初始化.

每个玩家读取他们的 ticket_idassignment 并使用以下方式尝试连接 FQDN (部署 URL) 外部端口。此时你的游戏服务器可能仍在初始化,因此 玩家必须多次重试连接,直到超过你通常的服务器初始化时间:

从 PIE(编辑器)连接 在开发和测试期间,按下波浪号键 ~ 并输入 open {URL}:{port} 并等待你的编辑器加载地图。

从游戏客户端构建连接 (以及在生产线上)尝试

circle-check
circle-info

我们不要求玩家确认匹配,因为我们的目标是提供尽可能短的游戏开始时间、高匹配填充率,并尽量减少排队弃赛和匹配取消。

玩家应当 在游戏重启之间持久保存他们的分配 ID,以便在游戏客户端崩溃的情况下他们可以检索连接详情并尝试重新连接。

circle-check

注意每个部署都带有所有票据 ID 和配置文件标签以增强可追溯性。

circle-exclamation

低延迟部署 ☑️ 一旦你确认能够无问题连接到你的部署并完成测试, 停止你的部署

✅ 你现在可以继续下一步。

circle-info

以释放帐户中的容量以便进行下一次构建。 在此处查找用于测试的 openAPI 规范.

{matchmaker-url}/swagger/v1/swagger.json

5. 游戏集成

  • Matchmaker 与以下内容集成:游戏客户端 ,用于,

  • 管理组、成员、分配和票据游戏客户端 深入解析 专用服务器

在玩家离开后。 Matchmaker 与以下内容集成:☑️ 在

在玩家离开后。 Matchmaker 与以下内容集成:中,我们建议通过游戏内 UI 向玩家提供票据状态更新以获得最佳玩家体验。参见: ,确保你正在对可重试的 429 请求过多(Too Many Requests)

在玩家离开后。 Matchmaker 与以下内容集成:错误使用指数退避和重试处理,以在突发流量期间给 matchmaker 恢复时间。

  • ,确保你正在处理不可重试的错误: 404 未找到(Not Found)

  • - 票据已被删除, 500 内部服务器错误(Internal Server Error)

在玩家离开后。 - 临时服务中断。游戏服务器

  1. 以检索初始玩家的匹配数据。 注入变量(应用版本)

用于部署信息、IP、位置等。 ☑️ 一旦玩家连接, 游戏服务器和游戏客户端

启动加载场景 - 3D 场景、类似大堂的社交 UI,或带进度条的加载屏幕,以表示初始化正在进行。 ☑️ 确保你的arrow-up-right 部署将在比赛结束后被正确停止。

🙌 恭喜,你已完成 Matchmaking 集成!要了解更多,请继续阅读。

🏁 高级示例

一个利用所有匹配功能的完整配置,包括 ,删除所有票据并导致短暂停机。, 规则,和 深入解析 可能看起来像这样:

chevron-right🏁 高级示例(完整示例配置)hashtag
{
  "version": "3.2.1",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "allowed_cors_origins": [
    "https://*.my-game-server.com"
  ],
  "profiles": {
    "advanced-example": {
      "ticket_expiration_period": "5m",
      "ticket_removal_period": "1m",
      "group_inactivity_removal_period": "5m"
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "min_team_size": 4,
              "max_team_size": 4
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 125,
              "max_latency": 125
            }
          },
          "elo_rating": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 50
            }
          },
          "selected_game_mode": {
            "type": "string_equality"
          },
          "selected_map": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "backfill_group_size": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "30": {
            "elo_rating": {
              "max_difference": 150
            },
            "beacons": {
              "difference": 125,
              "max_latency": 250
            }
          },
          "60": {
            "elo_rating": {
              "max_difference": 200
            }
          },
          "180": {
            "match_size": {
              "team_count": 1,
              "min_team_size": 1,
              "max_team_size": 4
            },
            "beacons": {
              "difference": 99999,
              "max_latency": 99999
            }
          }
        }
      }
    }
  }
}

🎾 自定义大厅

自定义大厅(私人大厅、沙盒关卡)是客厅多人游戏和在新功能进入主模式前测试新功能的非常受欢迎的选项。通常需要最少的限制,但目标是确保玩家可以 深入解析.

chevron-right🎾 自定义大厅示例hashtag
{
  "version": "3.2.1",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "profiles": {
    "custom-lobby-example": {
      "ticket_expiration_period": "3m",
      "ticket_removal_period": "1m",
      "group_inactivity_removal_period": "5m"
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "min_team_size": 4,
              "max_team_size": 4
            }
          },
          "lobby_id": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "10": {
            "match_size": {
              "team_count": 1,
              "min_team_size": 1,
              "max_team_size": 4
            }
          }
        }
      }
    }
  }
}
circle-info

对于没有公共访问权限的私人大厅,设置 "team_size": 1 并让组主独自开始游戏。所有者可以将组和主机分配详情共享给任意数量的成员加入。

circle-check

🥛 Backfill 展示

基于 匹配系统,此配置展示了 Backfill(补位) HOST_ASSIGNED 组(Groups).

chevron-right🥛 回填配置示例hashtag
{
  "version": "3.2.1",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "profiles": {
    "backfill-example": {
      "ticket_expiration_period": "5m",
      "ticket_removal_period": "1m",
      "group_inactivity_removal_period": "5m",
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "min_team_size": 4,
              "max_team_size": 4
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 100,
              "max_latency": 200
            }
          },
          "backfill_group_size": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {}
      }
    }
  }
}

可选地,某些游戏可能有特殊的匹配需求,例如:

  • 允许新玩家加入进行中的比赛(好友或“随机玩家”),

  • 在服务器启动后替换弃赛的玩家(离开者),以避免重启比赛,

  • 允许观众加入并观看锦标赛或好友比赛(电子竞技),

  • 将玩家集中到更大的服务器以提供更多社交互动(大型多人在线游戏)。

回填是一个 由服务器持有的票据,代表当前连接到服务器的玩家。 这可确保新加入的玩家在与当前玩家匹配时会遵守你的匹配规则。

circle-exclamation
回填场景可视化
circle-check

完成成功回填的步骤如下:

  1. 服务器为每个缺少玩家的队伍创建一个回填,使用来自以下项的值:

  2. 游戏客户端创建新的票据(成员资格)并包含 backfill_group_size 值:

    • "1" 如果玩家是单独进行匹配。

    • "2" 如果玩家是总共 2 人匹配组的一部分.

    • “new” 如果玩家启用了在加入进行中比赛之外也能开启新游戏。

  3. 游戏客户端继续 深入解析 并将玩家与匹配的回填配对。

  4. 如果回填的组没有完全填满队伍,服务器可以使用新回填玩家的票据重复此过程,以添加更多玩家并达到期望的队伍规模。

circle-info

要创建仅回填的配置文件,请将 min_team_size 设置为 999,999 并禁用票据 + 票据匹配。

chevron-right🥛 回填示例(回填展示)hashtag
chevron-right🥛 回填分配示例(回填展示)hashtag
circle-info

⚔️ 竞技游戏

竞技游戏侧重于玩家相互竞争以取得胜利,无论是作为个人(混战)还是队伍。通过将技能水平相似的玩家或队伍配对以确保公平和平衡的比赛,并通过快速找到公平竞争来维持游戏节奏。

chevron-right⚔️ 竞技游戏示例hashtag
{
  "version": "3.2.1",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "profiles": {
    "casual-example": {
      "ticket_expiration_period": "5m",
      "ticket_removal_period": "1m",
      "group_inactivity_removal_period": "5m",
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "min_team_size": 5,
              "max_team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 125,
              "max_latency": 150
            }
          },
          "selected_maps": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "backfill_group_size": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "30": {
            "beacons": {
              "difference": 125,
              "max_latency": 250
            }
          },
          "180": {
            "beacons": {
              "difference": 99999,
              "max_latency": 99999
            }
          }
        }
      }
    },
    "competitive-example": {
      "ticket_expiration_period": "5m",
      "ticket_removal_period": "1m",
      "group_inactivity_removal_period": "5m"
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "min_team_size": 5,
              "max_team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 125,
              "max_latency": 150
            }
          },
          "versus_ranks": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "120": {
            "beacons": {
              "difference": 125,
              "max_latency": 250
            }
          }
        }
      }
    },
    "challenger-example": {
      "ticket_expiration_period": "5m",
      "ticket_removal_period": "1m",
      "group_inactivity_removal_period": "5m"
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "min_team_size": 5,
              "max_team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 125,
              "max_latency": 150
            }
          },
          "elo_rating": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 50
            }
          }
        },
        "expansions": {
          "120": {
            "beacons": {
              "difference": 125,
              "max_latency": 250
            }
          }
        }
      }
    }
  }
}

你可以 定义多个队伍,每队 1 名或多名玩家,例如:

游戏模式
队伍数量
队伍规模
总玩家数

5v5 FPS

2

5

10

5v5 MOBA

2

5

10

20x3 大逃杀

20

3

60

10 人混战

1

10

10

定义多个 ,删除所有票据并导致短暂停机。 用于针对游戏模式的特定规则和设置,且 按需扩展.

  • 对于所有比赛:

  • 对于休闲比赛:

    • 省略等级限制以最大化匹配速度和匹配填充率,

    • 让玩家提供他们的地图偏好以找到适合所有人的地图,

    • 指定补位组大小以在不超过队伍规模的情况下替换离开的玩家,

    • 移除延迟限制以保证在 3 分钟(180 秒)排队时间后产生匹配。

  • 对于竞技比赛:

    • 限制等级以仅允许相似技能水平的对手,

    • 使用升降等级机制在联赛等级极端处匹配玩家。

  • 对于顶尖 1% 的高技能比赛(挑战者):

    • 使用数值技能评级(ELO)以在比赛中对技能分布进行精细控制,

    • 由于玩家数量较少,在放宽延迟要求前等待更长时间。

circle-check

🤝 合作游戏

合作游戏要求玩家作为一个团队为共同目标或对抗 AI 敌人而协作。将具有相似偏好和游戏习惯的玩家组合在一起。替换离开的玩家,并改进 添加并更新了示例请求/响应, 以提供响应迅速的玩家体验。

chevron-right🤝 合作游戏示例hashtag
{
  "version": "3.2.1",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "profiles": {
    "cooperative-example": {
      "ticket_expiration_period": "3m",
      "ticket_removal_period": "1m",
      "group_inactivity_removal_period": "5m",
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "min_team_size": 4,
              "max_team_size": 4
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 125,
              "max_latency": 150
            }
          },
          "selected_difficulty": {
            "type": "string_equality"
          },
          "selected_map": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "player_level": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 10
            }
          },
          "backfill_group_size": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "moderation_flags": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "30": {
            "beacons": {
              "difference": 125,
              "max_latency": 250
            },
            "player_level": {
              "max_difference": 20
            }
          },
          "60": {
            "match_size": {
              "team_count": 1,
              "min_team_size": 2,
              "max_team_size": 4
            }
          },
          "150": {
            "match_size": {
              "team_count": 1,
              "min_team_size": 1,
              "max_team_size": 4
            }
          }
        }
      }
    }
  }
}

当队伍数量为 1 且最大队伍规模为 4 时, 每场比赛最多需要 4 名玩家.

定义多个 ,删除所有票据并导致短暂停机。 针对游戏模式的特定规则和设置:

  • 从至少 4 名玩家开始以保持玩家在队列中并最大化匹配填充率,

  • 限制 匹配延迟(matchmaking latency) 以防止匹配到远距离的玩家,

  • 让玩家选择特定的游戏难度以适应每个人的技能水平,

  • 让玩家提供他们的地图偏好以找到适合所有人的地图,

  • 限制玩家等级差异以要求相似的游戏进度程度,

  • 指定补位组大小以在不超过服务器容量的情况下替换离开的玩家,

  • 使用管理标志将低信誉玩家和作弊者从普通玩家中分离,

  • 深入解析 用于预制队伍并在不超过服务器容量的情况下填充队伍,

  • 为其他配置文件分配更多 CPU 或内存, 应用与版本 使用不同的

从理想条件开始,然後 扩展限制 以确保快速匹配:

  • 随着时间放宽延迟限制以找到更多玩家,

  • 增加允许的玩家等级差异以找到更多玩家,

  • 降低最小队伍规模以需要更少玩家并更快开始游戏,

    • 服务器可以用 AI 队友填充空位,

    • team_count 深入解析 以便稍后添加玩家,

  • 将最小队伍规模设置为 1,以在 150 秒的排队时间后单人启动游戏

🎈 社交游戏

社交游戏侧重于通过协作、交流和共享体验建立玩家之间的联系与关系。支持大量玩家,最大化匹配填充率,并对齐玩家偏好与游戏习惯。替换离开的玩家,并确保高水平的 添加并更新了示例请求/响应, 以提供响应迅速的玩家体验。

chevron-right🎈 社交游戏示例hashtag
{
  "version": "3.2.1",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "profiles": {
    "social-example": {
      "ticket_expiration_period": "3m",
      "ticket_removal_period": "1m",
      "group_inactivity_removal_period": "5m",
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "attributes": {
              "team_count": 1,
              "min_team_size": 50,
              "max_team_size": 50
            },
            "type": "player_count"
          },
          "beacons": {
            "attributes": {
              "difference": 125,
              "max_latency": 150
            },
            "type": "latencies"
          },
          "selected_mode": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "backfill_group_size": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "moderation_flags": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "15": {
            "beacons": {
              "difference": 125,
              "max_latency": 250
            },
            "match_size": {
              "team_count": 1,
              "min_team_size": 20,
              "max_team_size": 50
            }
          },
          "30": {
            "match_size": {
              "team_count": 1,
              "min_team_size": 10,
              "max_team_size": 50
            }
          },
          "150": {
            "match_size": {
              "team_count": 1,
              "min_team_size": 1,
              "max_team_size": 50
            }
          }
        }
      }
    }
  }
}

当队伍数量为 1(混战)且最大队伍规模为 50 时, 每场比赛最多需要 50 名玩家.

定义 ,删除所有票据并导致短暂停机。 针对游戏模式的特定规则和设置:

  • 限制 匹配延迟(matchmaking latency) 以防止匹配到远距离的玩家,

  • 让玩家提供他们的游戏模式偏好并找到适合所有人的模式,

  • 指定补位组大小以在不超过服务器容量的情况下替换离开的玩家,

  • 使用管理标志将低信誉玩家和作弊者从普通玩家中分离,

  • 深入解析 用于预制大厅或在不超过服务器容量的情况下填充队伍,

  • 为其他配置文件分配更多 CPU 或内存, 应用与版本 使用不同的

从理想条件开始,然後 扩展限制 以确保快速匹配:

  • 随着时间放宽延迟限制以找到更多玩家,

  • 慢慢降低最小队伍规模以需要更少玩家并更快开始游戏,

    • 服务器可以用 AI 玩家填充空位,

    • team_count 深入解析 以便稍后添加玩家,

  • 将最小队伍规模设置为 1,以在 150 秒的排队时间后单人启动游戏

最后更新于

这有帮助吗?