了解Edgegap的工作原理

了解Edgegap的工作原理

如何在PvE多人游戏中添加 matchmaking

已发布

已发布

已发布

如何向COOP多人游戏添加 matchmaking

关键洞察

关键洞察

关键洞察

Edgegap 的 匹配器 是一个全托管、无限可定制的匹配系统,能够最佳地将全球玩家分组——在开发您的 PvE 多人游戏期间使用是免费的。

它也是唯一一个(我们所知)具有 基于延迟的匹配规则 的匹配系统,提供理想的在线多人游戏体验,无论您的游戏引擎是什么(Unity、Unreal 等)或游戏服务(EOS、UGS、PlayFab、Heroic Labs Nakama、Braincloud 等)。

由于我们的匹配器基于参数,因此无需编写代码。因此,集成非常简单,如果需要,我们的 入门指南 会为您提供每一步的帮助。

当您的游戏上线时,由于我们的匹配系统是全面管理的,您无需处理基础设施、错误、停机、可扩展性或数据库管理。我们为您处理所有这些事情,使您的 DevOps 工作量几乎降为零。

如何将匹配集成到您的 PvE 多人游戏中

-> 本文基于匹配文档。如果您遇到问题或差异,请务必参考原始指南,因为其更新更为频繁。

以下示例将帮助您测试核心匹配玩家流程,即:

  • 在共享的托管集群上创建撮合器实例,

  • 在撮合器配置中定义规则和设置,

  • 最后,使用我们的 API 测试玩家流程并管理玩家票证。

将我们的撮合器实施到您的游戏中需要五个步骤:

  1. 第一步是创建账户并使用我们的 PvE 游戏示例。瞧,您(在技术上)已经完成了一半!您只需要将撮合器集成到游戏中即可(参见步骤 5)。

  2. 现在,绝不应该盲目套用在网上找到的 JSON 示例,因此强烈建议针对您的回合制游戏调整上述规则。步骤 2(“探索配置”)是我们的“使用指南”,深入介绍了各项匹配规则的功能(“探索配置”)。

  3. 步骤 3(“查看实例详情”)涵盖了您个人特定的撮合器,以确保其已部署并与您的游戏设计协同工作。

  4. 步骤 4 正如其名称所示(“4. 测试票证 API”),主要用于测试撮合器是否收到了来自玩家的匹配请求(称为票证)。

  5. 步骤 5(“在游戏中集成匹配”)重点介绍了如何在您的引擎项目中集成撮合器。

如果您在排查故障时遇到难题,我们深入的学习中心提供了更多故障排除提示。

1. 设置免费套餐

注册您的免费 Edgegap 账户,并前往 撮合器控制面板页面。

在该页面中,先点击 Create Matchmaker,然后输入:

  • 撮合器的名称——这纯粹供您自己参考,例如 quickstart-dev,

  • 然后,为您的 PvE 游戏上传以下简单示例作为 JSON 配置:

{
  "version": "2.1.0",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "cooperative-example": {
      "application": {
        "name": "my-game-server=>CHANG-THIS-HERE",
        "version": "2024.01.30-16.23.00-UTC=>CHANG-THIS-HERE"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "team_size": 4
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 60,
              "max_latency": 60
            }
          },
          "selected_map": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_difficulty": {
            "type": "string_equality"
          },
          "player_level": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 10
            }
          }
        },
        "expansions": {
          "5": {
            "beacons": {
              "difference": 80,
              "max_latency": 80
            }
          },
          "10": {
            "player_level": {
              "max_difference": 20
            }
          },
          "20": {
            "match_size": {
              "team_count": 1,
              "team_size": 3
            },
            "beacons": {
              "difference": 100,
              "max_latency": 100
            }
          },
          "30": {
            "match_size": {
              "team_count": 1,
              "team_size": 2
            },
            "beacons": {
              "max_latency": 200
            }
          },
          "60": {
            "match_size": {
              "team_count": 1,
              "team_size": 1
            }
          }
        }
      }
    }
  }
}

(温馨提示:请务必修改应用程序 name 和 version,使其与您的 应用程序和版本匹配!)

如果没有出现验证错误,请点击 Create and Start 并等待流程完成。这将启动一个新的免费集群,其中包含您的简单示例撮合器。

现在您可以继续执行下一步。

2. 探索配置​

独特的多人 PvE 游戏规则

专门针对 PvE 游戏,您可以针对游戏模式特定规则和设置定义多个 匹配配置文件:

  • 让玩家提供他们的地图偏好,并选择适合所有人的地图,

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

  • 限制玩家等级差异,使游戏进度相近的玩家匹配在一起,

  • 通过 组队加入 来预设大厅或填补队伍而不超出队伍规模上限,

  • 允许更高的延迟,以便更快撮合对局并更好地兼顾细粒度的玩家偏好,

  • 当允许更多玩家时,使用不同的 🏷️ 应用程序版本 分配更多 CPU 或内存。

从理想条件开始,并放宽限制以确保快速完成匹配:

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

  • 缓慢减少队伍规模,以需要更少的玩家并尽快开始游戏,

    • 或者,您也可以让服务器使用 AI 队友填补空位,

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

  • 如果找不到队友,则单人启动游戏并使用 补位 在稍后添加玩家。

语义化版本控制

随着我们发布撮合器的更新,每个新版本都会使用语义化版本控制,通过解释 major.minor.patch 格式来清晰传达更改的影响:

  • major 版本包含不兼容的重大变更,需要进行集成审查,

  • minor 版本包含实质性且向后兼容的改进,

  • patch 版本包含问题修复和细微改进。

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

为确保意外的客户端崩溃或废弃的票证不会滞留并占用撮合器资源,票证将在 ticket_expiration_period 后取消,导致其状态变更为 CANCELLED,然后在 ticket_removal_period 后被永久删除。

我们匹配逻辑的核心配置在 匹配配置文件中。每个配置文件都是一个完全隔离的匹配队列,指向预先定义了所需 CPU 和内存 (RAM) 资源量的 应用程序版本。

初始规则集中的 匹配规则 必须得到满足才能将玩家分组在一起,每条规则由三个属性定义:

  • 您自选的名称,例如 - match size,

  • 规则类型,也称为操作符,例如 - player_count,

  • 最后是操作符属性,例如 team_count 或 team_size。

玩家数量规则

这是一条特殊规则,定义了需要匹配多少玩家才能发起分配:

  • team_count 指队伍数量,合作或混战模式可使用 1 支队伍,

  • team_size 指每队玩家数量。

我们的简单示例展示了一个 2 名玩家的合作游戏。

请注意,“玩家数量”规则是必需的,且在初始配置规则中只能定义一次。

延迟规则

使用此规则可为所有玩家提供尽可能低的延迟 (ping)。一旦客户端测量并针对所有可用信标提交其往返时间 (ping),Gen2 将仅考虑在针对 Ping 信标测得的特定 ping 值 difference 范围内的匹配。这为分割玩家群体提供了一个“软性”解决方案,使得能够与邻近区域进行匹配,尤其可以提高人口较少区域的匹配速度。使用 max_latency 可防止与距离较远的玩家进行匹配。

现在您可以继续执行下一步。

我们上面的示例 beacons 规则最初设置为 "difference": 50, "max_latency": 200:

  • Alice 和 Bob 将会匹配成功,因为 Beijing 被舍弃(>200),其余均在 | A-B | < 50 范围内:

    • Alice {Montreal: 12.3, Newark: 45.6, Dallas: 59.9, Beijing: 264.4};以及

    • Bob {Montreal: 27.3, Newark: 32.4, Dallas: 23.1, Beijing: 252.2}。

  • Charlie 和 Dave 将不会匹配成功,因为 Dallas 信标的 | C-D | > 50:

    • Alice {Montreal: 5.7 Newark: 44.2, Dallas: 59.5, Beijing: 263.2};以及

    • Bob {Montreal: 57.8, Newark: 32.0, Dallas: 24.2, Beijing: 272.3}。

请注意,“延迟规则”在初始配置规则中只能定义一次。

3. 查看实例详情​

新撮合器初始化后,在我们的控制面板中查看其详细信息:

Status 表示服务健康状况,可能为 ONLINE、OFFLINE 或 ERROR。

  • Identifier 有助于 Edgegap 员工在您需要排查故障时快速找到您的撮合器。

  • Started at 可用于追踪最新更新时间。

  • Size 对应我们的某一 定价层级。

  • API URL 将由游戏客户端和游戏服务器用于与 Gen2 通信。

  • Swagger URL 是我们提供的用于探索 API 规范模式的便捷 openAPI 规范图形界面。

  • Auth Token 是游戏客户端和游戏服务器用于身份验证的独一无二的机密令牌。

要使用 API 测试您的新撮合器,您将需要 Swagger URL、API URL 和 Auth Token。

现在您可以继续执行下一步。

4. 测试票证 API

首先,打开您的 Swagger URL 以在 Swagger GUI 中检查您的 openAPI 模式

点击“Matchmaker”标题下方的 /...swagger.json URL 以打开原始 JSON 模式:

将此页面作为文件保存到您的驱动器中(CTRL/CMD+S)。

打开您的 Postman 应用程序 并登录您的免费账户。

导入上一步中的 swagger.json 文件:

  • 保持选中 Postman Collection,

  • 选择 View Import Settings 并将设置 Parameter generation 更改为 Example。

确认导入,这将在左侧集合列表中显示一个名为 Matchmaker 的新集合。

View more actions,打开选项卡 Authorization 并选择:

  • Auth Type - API Key,

  • Key - “Authorization”

  • Value - 在此处插入您的 AuthToken 值,

  • Add to - Header。

按 (CTRL/CMD+S) 或点击“保存”图标以保存更改。Postman 选项卡中的橙色圆点应该会消失。

在 Matchmaker 集合中,选择 tickets 和 Create a matchmaking ticket,这将打开一个新选项卡。

选择选项卡 Body 以预览您的玩家票证请求:

注意 player_ip 设置为 null——这将自动使用添加到您请求中的 IP 地址(有关替代方案,请参阅 服务器到服务器集成),

  • profile 指的是您的 匹配配置文件,

  • attributes 包含您的撮合器规则的值,在此例中为 latencies 规则,

    • 规则 player_count 是唯一不需要在玩家票证中包含任何属性的规则。

注意:请务必参考示例的 Swagger 导入配置。 

点击 Send 并查看对您的玩家票证请求的响应:

  • id 是您唯一的匹配票证 ID,请妥善保存以备日后检查票证状态,

  • profile 确认所选的 匹配配置文件,

  • group_id 是发放给每张票证的唯一组 ID,单人玩家表示为大小为 1 的组,

    • 有关与好友或大厅一起匹配的信息,请参阅 组队加入,

  • player_ip 是解析出的玩家公共 IP 地址,无论使用何种识别方式,

  • assignment 设置为 null,表示票证尚未匹配或尚未分配给服务器,

  • created_at 提供有关玩家票证创建时间的信息,供游戏 UI 使用,

  • status 指示票证的当前状态,所有票证初始均为 SEARCHING(详情请参阅 匹配流程)。

再次点击 Send 创建第二张票证,以便我们的两位玩家匹配成功并启动服务器。

在 Matchmaker 集合中,选择 {ticketId} 和 Read a matchmaking ticket。

输入上一步响应中的票证 ID,然后点击 Send。

查看玩家票证的更新分配情况:

  • 状态首先变更为 MATCH_FOUND,同时保持 assignment 设置为 null,以表明玩家已匹配成功且正在分配服务器,

再次点击 Send 以检查您的票证,并查看玩家票证的更新分配情况:

  • 状态变更为 HOST_ASSIGNED,且 assignment 包含已分配服务器的详细信息。

 在我们的控制面板中检查您的新部署:

  • 注意每个部署都标有所有票证 ID 和配置文件,以便增强可追溯性。

尝试从您的游戏客户端连接到分配的服务器。

一旦您确认能够毫无问题地连接到部署并完成测试,请停止您的部署,以释放账户中用于下一次构建的容量。

现在您可以继续执行下一步。

5. 在游戏中集成撮合器​

Edgegap 的匹配集成了:

  • 与游戏客户端集成,以管理玩家票证,

  • 与游戏服务器集成,以:

    • 处理通过票证传递的玩家偏好,

    • 可选支持 补位 以在启动后添加或替换玩家。

对于在游戏客户端中,我们建议在整个匹配流程中通过游戏内 UI 向玩家提供票证状态更新,以获得最佳玩家体验。请参阅:

在游戏客户端中,确保处理不可重试的错误:

  • HTTP 404 Not Found - 票证已被删除,

  • HTTP 500 Internal Server Error - 服务暂时中断。

在游戏服务器中,处理玩家偏好和初始服务器上下文。无需 API 集成:

  1. 读取 注入的环境变量 (Gen2) 以检索初始玩家的匹配数据。

  2. 读取 注入的环境变量(应用程序版本) 以获取特定于版本的参数、设置(玩家容量)和机密信息。

  3. 读取 注入的环境变量(部署) 以获取部署信息,例如 IP 地址、位置等。

一旦玩家连接,游戏服务器和游戏客户端就会启动加载场景以执行同步步骤(例如选择并加载地图/场景/关卡)。我们建议使用完备的 3D 场景、类似大厅的社交 UI 或带有进度条的加载屏幕,以指示初始化正在进行中。

一旦游戏客户端完全加载,玩家就会加载/传送至主游戏场景。

可选地,游戏服务器可以创建并管理补位和玩家容量(添加或替换离开的玩家)。

在以下情况下,确保使用 注入的 DELETE_URL 正确停止您的部署:

  • 没有玩家加入比赛,

  • 所有玩家均已离开比赛,

  • 比赛正常结束。

祝贺您,您已完成 Edgegap 撮合器集成!如果您想了解更多信息,请在我们的学习中心中阅读相关的所有内容。

如何将匹配集成到您的 PvE 多人游戏中

-> 本文基于匹配文档。如果您遇到问题或差异,请务必参考原始指南,因为其更新更为频繁。

以下示例将帮助您测试核心匹配玩家流程,即:

  • 在共享的托管集群上创建撮合器实例,

  • 在撮合器配置中定义规则和设置,

  • 最后,使用我们的 API 测试玩家流程并管理玩家票证。

将我们的撮合器实施到您的游戏中需要五个步骤:

  1. 第一步是创建账户并使用我们的 PvE 游戏示例。瞧,您(在技术上)已经完成了一半!您只需要将撮合器集成到游戏中即可(参见步骤 5)。

  2. 现在,绝不应该盲目套用在网上找到的 JSON 示例,因此强烈建议针对您的回合制游戏调整上述规则。步骤 2(“探索配置”)是我们的“使用指南”,深入介绍了各项匹配规则的功能(“探索配置”)。

  3. 步骤 3(“查看实例详情”)涵盖了您个人特定的撮合器,以确保其已部署并与您的游戏设计协同工作。

  4. 步骤 4 正如其名称所示(“4. 测试票证 API”),主要用于测试撮合器是否收到了来自玩家的匹配请求(称为票证)。

  5. 步骤 5(“在游戏中集成匹配”)重点介绍了如何在您的引擎项目中集成撮合器。

如果您在排查故障时遇到难题,我们深入的学习中心提供了更多故障排除提示。

1. 设置免费套餐

注册您的免费 Edgegap 账户,并前往 撮合器控制面板页面。

在该页面中,先点击 Create Matchmaker,然后输入:

  • 撮合器的名称——这纯粹供您自己参考,例如 quickstart-dev,

  • 然后,为您的 PvE 游戏上传以下简单示例作为 JSON 配置:

{
  "version": "2.1.0",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "cooperative-example": {
      "application": {
        "name": "my-game-server=>CHANG-THIS-HERE",
        "version": "2024.01.30-16.23.00-UTC=>CHANG-THIS-HERE"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "team_size": 4
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 60,
              "max_latency": 60
            }
          },
          "selected_map": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_difficulty": {
            "type": "string_equality"
          },
          "player_level": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 10
            }
          }
        },
        "expansions": {
          "5": {
            "beacons": {
              "difference": 80,
              "max_latency": 80
            }
          },
          "10": {
            "player_level": {
              "max_difference": 20
            }
          },
          "20": {
            "match_size": {
              "team_count": 1,
              "team_size": 3
            },
            "beacons": {
              "difference": 100,
              "max_latency": 100
            }
          },
          "30": {
            "match_size": {
              "team_count": 1,
              "team_size": 2
            },
            "beacons": {
              "max_latency": 200
            }
          },
          "60": {
            "match_size": {
              "team_count": 1,
              "team_size": 1
            }
          }
        }
      }
    }
  }
}

(温馨提示:请务必修改应用程序 name 和 version,使其与您的 应用程序和版本匹配!)

如果没有出现验证错误,请点击 Create and Start 并等待流程完成。这将启动一个新的免费集群,其中包含您的简单示例撮合器。

现在您可以继续执行下一步。

2. 探索配置​

独特的多人 PvE 游戏规则

专门针对 PvE 游戏,您可以针对游戏模式特定规则和设置定义多个 匹配配置文件:

  • 让玩家提供他们的地图偏好,并选择适合所有人的地图,

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

  • 限制玩家等级差异,使游戏进度相近的玩家匹配在一起,

  • 通过 组队加入 来预设大厅或填补队伍而不超出队伍规模上限,

  • 允许更高的延迟,以便更快撮合对局并更好地兼顾细粒度的玩家偏好,

  • 当允许更多玩家时,使用不同的 🏷️ 应用程序版本 分配更多 CPU 或内存。

从理想条件开始,并放宽限制以确保快速完成匹配:

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

  • 缓慢减少队伍规模,以需要更少的玩家并尽快开始游戏,

    • 或者,您也可以让服务器使用 AI 队友填补空位,

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

  • 如果找不到队友,则单人启动游戏并使用 补位 在稍后添加玩家。

语义化版本控制

随着我们发布撮合器的更新,每个新版本都会使用语义化版本控制,通过解释 major.minor.patch 格式来清晰传达更改的影响:

  • major 版本包含不兼容的重大变更,需要进行集成审查,

  • minor 版本包含实质性且向后兼容的改进,

  • patch 版本包含问题修复和细微改进。

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

为确保意外的客户端崩溃或废弃的票证不会滞留并占用撮合器资源,票证将在 ticket_expiration_period 后取消,导致其状态变更为 CANCELLED,然后在 ticket_removal_period 后被永久删除。

我们匹配逻辑的核心配置在 匹配配置文件中。每个配置文件都是一个完全隔离的匹配队列,指向预先定义了所需 CPU 和内存 (RAM) 资源量的 应用程序版本。

初始规则集中的 匹配规则 必须得到满足才能将玩家分组在一起,每条规则由三个属性定义:

  • 您自选的名称,例如 - match size,

  • 规则类型,也称为操作符,例如 - player_count,

  • 最后是操作符属性,例如 team_count 或 team_size。

玩家数量规则

这是一条特殊规则,定义了需要匹配多少玩家才能发起分配:

  • team_count 指队伍数量,合作或混战模式可使用 1 支队伍,

  • team_size 指每队玩家数量。

我们的简单示例展示了一个 2 名玩家的合作游戏。

请注意,“玩家数量”规则是必需的,且在初始配置规则中只能定义一次。

延迟规则

使用此规则可为所有玩家提供尽可能低的延迟 (ping)。一旦客户端测量并针对所有可用信标提交其往返时间 (ping),Gen2 将仅考虑在针对 Ping 信标测得的特定 ping 值 difference 范围内的匹配。这为分割玩家群体提供了一个“软性”解决方案,使得能够与邻近区域进行匹配,尤其可以提高人口较少区域的匹配速度。使用 max_latency 可防止与距离较远的玩家进行匹配。

现在您可以继续执行下一步。

我们上面的示例 beacons 规则最初设置为 "difference": 50, "max_latency": 200:

  • Alice 和 Bob 将会匹配成功,因为 Beijing 被舍弃(>200),其余均在 | A-B | < 50 范围内:

    • Alice {Montreal: 12.3, Newark: 45.6, Dallas: 59.9, Beijing: 264.4};以及

    • Bob {Montreal: 27.3, Newark: 32.4, Dallas: 23.1, Beijing: 252.2}。

  • Charlie 和 Dave 将不会匹配成功,因为 Dallas 信标的 | C-D | > 50:

    • Alice {Montreal: 5.7 Newark: 44.2, Dallas: 59.5, Beijing: 263.2};以及

    • Bob {Montreal: 57.8, Newark: 32.0, Dallas: 24.2, Beijing: 272.3}。

请注意,“延迟规则”在初始配置规则中只能定义一次。

3. 查看实例详情​

新撮合器初始化后,在我们的控制面板中查看其详细信息:

Status 表示服务健康状况,可能为 ONLINE、OFFLINE 或 ERROR。

  • Identifier 有助于 Edgegap 员工在您需要排查故障时快速找到您的撮合器。

  • Started at 可用于追踪最新更新时间。

  • Size 对应我们的某一 定价层级。

  • API URL 将由游戏客户端和游戏服务器用于与 Gen2 通信。

  • Swagger URL 是我们提供的用于探索 API 规范模式的便捷 openAPI 规范图形界面。

  • Auth Token 是游戏客户端和游戏服务器用于身份验证的独一无二的机密令牌。

要使用 API 测试您的新撮合器,您将需要 Swagger URL、API URL 和 Auth Token。

现在您可以继续执行下一步。

4. 测试票证 API

首先,打开您的 Swagger URL 以在 Swagger GUI 中检查您的 openAPI 模式

点击“Matchmaker”标题下方的 /...swagger.json URL 以打开原始 JSON 模式:

将此页面作为文件保存到您的驱动器中(CTRL/CMD+S)。

打开您的 Postman 应用程序 并登录您的免费账户。

导入上一步中的 swagger.json 文件:

  • 保持选中 Postman Collection,

  • 选择 View Import Settings 并将设置 Parameter generation 更改为 Example。

确认导入,这将在左侧集合列表中显示一个名为 Matchmaker 的新集合。

View more actions,打开选项卡 Authorization 并选择:

  • Auth Type - API Key,

  • Key - “Authorization”

  • Value - 在此处插入您的 AuthToken 值,

  • Add to - Header。

按 (CTRL/CMD+S) 或点击“保存”图标以保存更改。Postman 选项卡中的橙色圆点应该会消失。

在 Matchmaker 集合中,选择 tickets 和 Create a matchmaking ticket,这将打开一个新选项卡。

选择选项卡 Body 以预览您的玩家票证请求:

注意 player_ip 设置为 null——这将自动使用添加到您请求中的 IP 地址(有关替代方案,请参阅 服务器到服务器集成),

  • profile 指的是您的 匹配配置文件,

  • attributes 包含您的撮合器规则的值,在此例中为 latencies 规则,

    • 规则 player_count 是唯一不需要在玩家票证中包含任何属性的规则。

注意:请务必参考示例的 Swagger 导入配置。 

点击 Send 并查看对您的玩家票证请求的响应:

  • id 是您唯一的匹配票证 ID,请妥善保存以备日后检查票证状态,

  • profile 确认所选的 匹配配置文件,

  • group_id 是发放给每张票证的唯一组 ID,单人玩家表示为大小为 1 的组,

    • 有关与好友或大厅一起匹配的信息,请参阅 组队加入,

  • player_ip 是解析出的玩家公共 IP 地址,无论使用何种识别方式,

  • assignment 设置为 null,表示票证尚未匹配或尚未分配给服务器,

  • created_at 提供有关玩家票证创建时间的信息,供游戏 UI 使用,

  • status 指示票证的当前状态,所有票证初始均为 SEARCHING(详情请参阅 匹配流程)。

再次点击 Send 创建第二张票证,以便我们的两位玩家匹配成功并启动服务器。

在 Matchmaker 集合中,选择 {ticketId} 和 Read a matchmaking ticket。

输入上一步响应中的票证 ID,然后点击 Send。

查看玩家票证的更新分配情况:

  • 状态首先变更为 MATCH_FOUND,同时保持 assignment 设置为 null,以表明玩家已匹配成功且正在分配服务器,

再次点击 Send 以检查您的票证,并查看玩家票证的更新分配情况:

  • 状态变更为 HOST_ASSIGNED,且 assignment 包含已分配服务器的详细信息。

 在我们的控制面板中检查您的新部署:

  • 注意每个部署都标有所有票证 ID 和配置文件,以便增强可追溯性。

尝试从您的游戏客户端连接到分配的服务器。

一旦您确认能够毫无问题地连接到部署并完成测试,请停止您的部署,以释放账户中用于下一次构建的容量。

现在您可以继续执行下一步。

5. 在游戏中集成撮合器​

Edgegap 的匹配集成了:

  • 与游戏客户端集成,以管理玩家票证,

  • 与游戏服务器集成,以:

    • 处理通过票证传递的玩家偏好,

    • 可选支持 补位 以在启动后添加或替换玩家。

对于在游戏客户端中,我们建议在整个匹配流程中通过游戏内 UI 向玩家提供票证状态更新,以获得最佳玩家体验。请参阅:

在游戏客户端中,确保处理不可重试的错误:

  • HTTP 404 Not Found - 票证已被删除,

  • HTTP 500 Internal Server Error - 服务暂时中断。

在游戏服务器中,处理玩家偏好和初始服务器上下文。无需 API 集成:

  1. 读取 注入的环境变量 (Gen2) 以检索初始玩家的匹配数据。

  2. 读取 注入的环境变量(应用程序版本) 以获取特定于版本的参数、设置(玩家容量)和机密信息。

  3. 读取 注入的环境变量(部署) 以获取部署信息,例如 IP 地址、位置等。

一旦玩家连接,游戏服务器和游戏客户端就会启动加载场景以执行同步步骤(例如选择并加载地图/场景/关卡)。我们建议使用完备的 3D 场景、类似大厅的社交 UI 或带有进度条的加载屏幕,以指示初始化正在进行中。

一旦游戏客户端完全加载,玩家就会加载/传送至主游戏场景。

可选地,游戏服务器可以创建并管理补位和玩家容量(添加或替换离开的玩家)。

在以下情况下,确保使用 注入的 DELETE_URL 正确停止您的部署:

  • 没有玩家加入比赛,

  • 所有玩家均已离开比赛,

  • 比赛正常结束。

祝贺您,您已完成 Edgegap 撮合器集成!如果您想了解更多信息,请在我们的学习中心中阅读相关的所有内容。

如何将匹配集成到您的 PvE 多人游戏中

-> 本文基于匹配文档。如果您遇到问题或差异,请务必参考原始指南,因为其更新更为频繁。

以下示例将帮助您测试核心匹配玩家流程,即:

  • 在共享的托管集群上创建撮合器实例,

  • 在撮合器配置中定义规则和设置,

  • 最后,使用我们的 API 测试玩家流程并管理玩家票证。

将我们的撮合器实施到您的游戏中需要五个步骤:

  1. 第一步是创建账户并使用我们的 PvE 游戏示例。瞧,您(在技术上)已经完成了一半!您只需要将撮合器集成到游戏中即可(参见步骤 5)。

  2. 现在,绝不应该盲目套用在网上找到的 JSON 示例,因此强烈建议针对您的回合制游戏调整上述规则。步骤 2(“探索配置”)是我们的“使用指南”,深入介绍了各项匹配规则的功能(“探索配置”)。

  3. 步骤 3(“查看实例详情”)涵盖了您个人特定的撮合器,以确保其已部署并与您的游戏设计协同工作。

  4. 步骤 4 正如其名称所示(“4. 测试票证 API”),主要用于测试撮合器是否收到了来自玩家的匹配请求(称为票证)。

  5. 步骤 5(“在游戏中集成匹配”)重点介绍了如何在您的引擎项目中集成撮合器。

如果您在排查故障时遇到难题,我们深入的学习中心提供了更多故障排除提示。

1. 设置免费套餐

注册您的免费 Edgegap 账户,并前往 撮合器控制面板页面。

在该页面中,先点击 Create Matchmaker,然后输入:

  • 撮合器的名称——这纯粹供您自己参考,例如 quickstart-dev,

  • 然后,为您的 PvE 游戏上传以下简单示例作为 JSON 配置:

{
  "version": "2.1.0",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "cooperative-example": {
      "application": {
        "name": "my-game-server=>CHANG-THIS-HERE",
        "version": "2024.01.30-16.23.00-UTC=>CHANG-THIS-HERE"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "team_size": 4
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 60,
              "max_latency": 60
            }
          },
          "selected_map": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_difficulty": {
            "type": "string_equality"
          },
          "player_level": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 10
            }
          }
        },
        "expansions": {
          "5": {
            "beacons": {
              "difference": 80,
              "max_latency": 80
            }
          },
          "10": {
            "player_level": {
              "max_difference": 20
            }
          },
          "20": {
            "match_size": {
              "team_count": 1,
              "team_size": 3
            },
            "beacons": {
              "difference": 100,
              "max_latency": 100
            }
          },
          "30": {
            "match_size": {
              "team_count": 1,
              "team_size": 2
            },
            "beacons": {
              "max_latency": 200
            }
          },
          "60": {
            "match_size": {
              "team_count": 1,
              "team_size": 1
            }
          }
        }
      }
    }
  }
}

(温馨提示:请务必修改应用程序 name 和 version,使其与您的 应用程序和版本匹配!)

如果没有出现验证错误,请点击 Create and Start 并等待流程完成。这将启动一个新的免费集群,其中包含您的简单示例撮合器。

现在您可以继续执行下一步。

2. 探索配置​

独特的多人 PvE 游戏规则

专门针对 PvE 游戏,您可以针对游戏模式特定规则和设置定义多个 匹配配置文件:

  • 让玩家提供他们的地图偏好,并选择适合所有人的地图,

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

  • 限制玩家等级差异,使游戏进度相近的玩家匹配在一起,

  • 通过 组队加入 来预设大厅或填补队伍而不超出队伍规模上限,

  • 允许更高的延迟,以便更快撮合对局并更好地兼顾细粒度的玩家偏好,

  • 当允许更多玩家时,使用不同的 🏷️ 应用程序版本 分配更多 CPU 或内存。

从理想条件开始,并放宽限制以确保快速完成匹配:

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

  • 缓慢减少队伍规模,以需要更少的玩家并尽快开始游戏,

    • 或者,您也可以让服务器使用 AI 队友填补空位,

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

  • 如果找不到队友,则单人启动游戏并使用 补位 在稍后添加玩家。

语义化版本控制

随着我们发布撮合器的更新,每个新版本都会使用语义化版本控制,通过解释 major.minor.patch 格式来清晰传达更改的影响:

  • major 版本包含不兼容的重大变更,需要进行集成审查,

  • minor 版本包含实质性且向后兼容的改进,

  • patch 版本包含问题修复和细微改进。

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

为确保意外的客户端崩溃或废弃的票证不会滞留并占用撮合器资源,票证将在 ticket_expiration_period 后取消,导致其状态变更为 CANCELLED,然后在 ticket_removal_period 后被永久删除。

我们匹配逻辑的核心配置在 匹配配置文件中。每个配置文件都是一个完全隔离的匹配队列,指向预先定义了所需 CPU 和内存 (RAM) 资源量的 应用程序版本。

初始规则集中的 匹配规则 必须得到满足才能将玩家分组在一起,每条规则由三个属性定义:

  • 您自选的名称,例如 - match size,

  • 规则类型,也称为操作符,例如 - player_count,

  • 最后是操作符属性,例如 team_count 或 team_size。

玩家数量规则

这是一条特殊规则,定义了需要匹配多少玩家才能发起分配:

  • team_count 指队伍数量,合作或混战模式可使用 1 支队伍,

  • team_size 指每队玩家数量。

我们的简单示例展示了一个 2 名玩家的合作游戏。

请注意,“玩家数量”规则是必需的,且在初始配置规则中只能定义一次。

延迟规则

使用此规则可为所有玩家提供尽可能低的延迟 (ping)。一旦客户端测量并针对所有可用信标提交其往返时间 (ping),Gen2 将仅考虑在针对 Ping 信标测得的特定 ping 值 difference 范围内的匹配。这为分割玩家群体提供了一个“软性”解决方案,使得能够与邻近区域进行匹配,尤其可以提高人口较少区域的匹配速度。使用 max_latency 可防止与距离较远的玩家进行匹配。

现在您可以继续执行下一步。

我们上面的示例 beacons 规则最初设置为 "difference": 50, "max_latency": 200:

  • Alice 和 Bob 将会匹配成功,因为 Beijing 被舍弃(>200),其余均在 | A-B | < 50 范围内:

    • Alice {Montreal: 12.3, Newark: 45.6, Dallas: 59.9, Beijing: 264.4};以及

    • Bob {Montreal: 27.3, Newark: 32.4, Dallas: 23.1, Beijing: 252.2}。

  • Charlie 和 Dave 将不会匹配成功,因为 Dallas 信标的 | C-D | > 50:

    • Alice {Montreal: 5.7 Newark: 44.2, Dallas: 59.5, Beijing: 263.2};以及

    • Bob {Montreal: 57.8, Newark: 32.0, Dallas: 24.2, Beijing: 272.3}。

请注意,“延迟规则”在初始配置规则中只能定义一次。

3. 查看实例详情​

新撮合器初始化后,在我们的控制面板中查看其详细信息:

Status 表示服务健康状况,可能为 ONLINE、OFFLINE 或 ERROR。

  • Identifier 有助于 Edgegap 员工在您需要排查故障时快速找到您的撮合器。

  • Started at 可用于追踪最新更新时间。

  • Size 对应我们的某一 定价层级。

  • API URL 将由游戏客户端和游戏服务器用于与 Gen2 通信。

  • Swagger URL 是我们提供的用于探索 API 规范模式的便捷 openAPI 规范图形界面。

  • Auth Token 是游戏客户端和游戏服务器用于身份验证的独一无二的机密令牌。

要使用 API 测试您的新撮合器,您将需要 Swagger URL、API URL 和 Auth Token。

现在您可以继续执行下一步。

4. 测试票证 API

首先,打开您的 Swagger URL 以在 Swagger GUI 中检查您的 openAPI 模式

点击“Matchmaker”标题下方的 /...swagger.json URL 以打开原始 JSON 模式:

将此页面作为文件保存到您的驱动器中(CTRL/CMD+S)。

打开您的 Postman 应用程序 并登录您的免费账户。

导入上一步中的 swagger.json 文件:

  • 保持选中 Postman Collection,

  • 选择 View Import Settings 并将设置 Parameter generation 更改为 Example。

确认导入,这将在左侧集合列表中显示一个名为 Matchmaker 的新集合。

View more actions,打开选项卡 Authorization 并选择:

  • Auth Type - API Key,

  • Key - “Authorization”

  • Value - 在此处插入您的 AuthToken 值,

  • Add to - Header。

按 (CTRL/CMD+S) 或点击“保存”图标以保存更改。Postman 选项卡中的橙色圆点应该会消失。

在 Matchmaker 集合中,选择 tickets 和 Create a matchmaking ticket,这将打开一个新选项卡。

选择选项卡 Body 以预览您的玩家票证请求:

注意 player_ip 设置为 null——这将自动使用添加到您请求中的 IP 地址(有关替代方案,请参阅 服务器到服务器集成),

  • profile 指的是您的 匹配配置文件,

  • attributes 包含您的撮合器规则的值,在此例中为 latencies 规则,

    • 规则 player_count 是唯一不需要在玩家票证中包含任何属性的规则。

注意:请务必参考示例的 Swagger 导入配置。 

点击 Send 并查看对您的玩家票证请求的响应:

  • id 是您唯一的匹配票证 ID,请妥善保存以备日后检查票证状态,

  • profile 确认所选的 匹配配置文件,

  • group_id 是发放给每张票证的唯一组 ID,单人玩家表示为大小为 1 的组,

    • 有关与好友或大厅一起匹配的信息,请参阅 组队加入,

  • player_ip 是解析出的玩家公共 IP 地址,无论使用何种识别方式,

  • assignment 设置为 null,表示票证尚未匹配或尚未分配给服务器,

  • created_at 提供有关玩家票证创建时间的信息,供游戏 UI 使用,

  • status 指示票证的当前状态,所有票证初始均为 SEARCHING(详情请参阅 匹配流程)。

再次点击 Send 创建第二张票证,以便我们的两位玩家匹配成功并启动服务器。

在 Matchmaker 集合中,选择 {ticketId} 和 Read a matchmaking ticket。

输入上一步响应中的票证 ID,然后点击 Send。

查看玩家票证的更新分配情况:

  • 状态首先变更为 MATCH_FOUND,同时保持 assignment 设置为 null,以表明玩家已匹配成功且正在分配服务器,

再次点击 Send 以检查您的票证,并查看玩家票证的更新分配情况:

  • 状态变更为 HOST_ASSIGNED,且 assignment 包含已分配服务器的详细信息。

 在我们的控制面板中检查您的新部署:

  • 注意每个部署都标有所有票证 ID 和配置文件,以便增强可追溯性。

尝试从您的游戏客户端连接到分配的服务器。

一旦您确认能够毫无问题地连接到部署并完成测试,请停止您的部署,以释放账户中用于下一次构建的容量。

现在您可以继续执行下一步。

5. 在游戏中集成撮合器​

Edgegap 的匹配集成了:

  • 与游戏客户端集成,以管理玩家票证,

  • 与游戏服务器集成,以:

    • 处理通过票证传递的玩家偏好,

    • 可选支持 补位 以在启动后添加或替换玩家。

对于在游戏客户端中,我们建议在整个匹配流程中通过游戏内 UI 向玩家提供票证状态更新,以获得最佳玩家体验。请参阅:

在游戏客户端中,确保处理不可重试的错误:

  • HTTP 404 Not Found - 票证已被删除,

  • HTTP 500 Internal Server Error - 服务暂时中断。

在游戏服务器中,处理玩家偏好和初始服务器上下文。无需 API 集成:

  1. 读取 注入的环境变量 (Gen2) 以检索初始玩家的匹配数据。

  2. 读取 注入的环境变量(应用程序版本) 以获取特定于版本的参数、设置(玩家容量)和机密信息。

  3. 读取 注入的环境变量(部署) 以获取部署信息,例如 IP 地址、位置等。

一旦玩家连接,游戏服务器和游戏客户端就会启动加载场景以执行同步步骤(例如选择并加载地图/场景/关卡)。我们建议使用完备的 3D 场景、类似大厅的社交 UI 或带有进度条的加载屏幕,以指示初始化正在进行中。

一旦游戏客户端完全加载,玩家就会加载/传送至主游戏场景。

可选地,游戏服务器可以创建并管理补位和玩家容量(添加或替换离开的玩家)。

在以下情况下,确保使用 注入的 DELETE_URL 正确停止您的部署:

  • 没有玩家加入比赛,

  • 所有玩家均已离开比赛,

  • 比赛正常结束。

祝贺您,您已完成 Edgegap 撮合器集成!如果您想了解更多信息,请在我们的学习中心中阅读相关的所有内容。

如何将匹配集成到您的 PvE 多人游戏中

-> 本文基于匹配文档。如果您遇到问题或差异,请务必参考原始指南,因为其更新更为频繁。

以下示例将帮助您测试核心匹配玩家流程,即:

  • 在共享的托管集群上创建撮合器实例,

  • 在撮合器配置中定义规则和设置,

  • 最后,使用我们的 API 测试玩家流程并管理玩家票证。

将我们的撮合器实施到您的游戏中需要五个步骤:

  1. 第一步是创建账户并使用我们的 PvE 游戏示例。瞧,您(在技术上)已经完成了一半!您只需要将撮合器集成到游戏中即可(参见步骤 5)。

  2. 现在,绝不应该盲目套用在网上找到的 JSON 示例,因此强烈建议针对您的回合制游戏调整上述规则。步骤 2(“探索配置”)是我们的“使用指南”,深入介绍了各项匹配规则的功能(“探索配置”)。

  3. 步骤 3(“查看实例详情”)涵盖了您个人特定的撮合器,以确保其已部署并与您的游戏设计协同工作。

  4. 步骤 4 正如其名称所示(“4. 测试票证 API”),主要用于测试撮合器是否收到了来自玩家的匹配请求(称为票证)。

  5. 步骤 5(“在游戏中集成匹配”)重点介绍了如何在您的引擎项目中集成撮合器。

如果您在排查故障时遇到难题,我们深入的学习中心提供了更多故障排除提示。

1. 设置免费套餐

注册您的免费 Edgegap 账户,并前往 撮合器控制面板页面。

在该页面中,先点击 Create Matchmaker,然后输入:

  • 撮合器的名称——这纯粹供您自己参考,例如 quickstart-dev,

  • 然后,为您的 PvE 游戏上传以下简单示例作为 JSON 配置:

{
  "version": "2.1.0",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "cooperative-example": {
      "application": {
        "name": "my-game-server=>CHANG-THIS-HERE",
        "version": "2024.01.30-16.23.00-UTC=>CHANG-THIS-HERE"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "team_size": 4
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 60,
              "max_latency": 60
            }
          },
          "selected_map": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_difficulty": {
            "type": "string_equality"
          },
          "player_level": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 10
            }
          }
        },
        "expansions": {
          "5": {
            "beacons": {
              "difference": 80,
              "max_latency": 80
            }
          },
          "10": {
            "player_level": {
              "max_difference": 20
            }
          },
          "20": {
            "match_size": {
              "team_count": 1,
              "team_size": 3
            },
            "beacons": {
              "difference": 100,
              "max_latency": 100
            }
          },
          "30": {
            "match_size": {
              "team_count": 1,
              "team_size": 2
            },
            "beacons": {
              "max_latency": 200
            }
          },
          "60": {
            "match_size": {
              "team_count": 1,
              "team_size": 1
            }
          }
        }
      }
    }
  }
}

(温馨提示:请务必修改应用程序 name 和 version,使其与您的 应用程序和版本匹配!)

如果没有出现验证错误,请点击 Create and Start 并等待流程完成。这将启动一个新的免费集群,其中包含您的简单示例撮合器。

现在您可以继续执行下一步。

2. 探索配置​

独特的多人 PvE 游戏规则

专门针对 PvE 游戏,您可以针对游戏模式特定规则和设置定义多个 匹配配置文件:

  • 让玩家提供他们的地图偏好,并选择适合所有人的地图,

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

  • 限制玩家等级差异,使游戏进度相近的玩家匹配在一起,

  • 通过 组队加入 来预设大厅或填补队伍而不超出队伍规模上限,

  • 允许更高的延迟,以便更快撮合对局并更好地兼顾细粒度的玩家偏好,

  • 当允许更多玩家时,使用不同的 🏷️ 应用程序版本 分配更多 CPU 或内存。

从理想条件开始,并放宽限制以确保快速完成匹配:

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

  • 缓慢减少队伍规模,以需要更少的玩家并尽快开始游戏,

    • 或者,您也可以让服务器使用 AI 队友填补空位,

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

  • 如果找不到队友,则单人启动游戏并使用 补位 在稍后添加玩家。

语义化版本控制

随着我们发布撮合器的更新,每个新版本都会使用语义化版本控制,通过解释 major.minor.patch 格式来清晰传达更改的影响:

  • major 版本包含不兼容的重大变更,需要进行集成审查,

  • minor 版本包含实质性且向后兼容的改进,

  • patch 版本包含问题修复和细微改进。

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

为确保意外的客户端崩溃或废弃的票证不会滞留并占用撮合器资源,票证将在 ticket_expiration_period 后取消,导致其状态变更为 CANCELLED,然后在 ticket_removal_period 后被永久删除。

我们匹配逻辑的核心配置在 匹配配置文件中。每个配置文件都是一个完全隔离的匹配队列,指向预先定义了所需 CPU 和内存 (RAM) 资源量的 应用程序版本。

初始规则集中的 匹配规则 必须得到满足才能将玩家分组在一起,每条规则由三个属性定义:

  • 您自选的名称,例如 - match size,

  • 规则类型,也称为操作符,例如 - player_count,

  • 最后是操作符属性,例如 team_count 或 team_size。

玩家数量规则

这是一条特殊规则,定义了需要匹配多少玩家才能发起分配:

  • team_count 指队伍数量,合作或混战模式可使用 1 支队伍,

  • team_size 指每队玩家数量。

我们的简单示例展示了一个 2 名玩家的合作游戏。

请注意,“玩家数量”规则是必需的,且在初始配置规则中只能定义一次。

延迟规则

使用此规则可为所有玩家提供尽可能低的延迟 (ping)。一旦客户端测量并针对所有可用信标提交其往返时间 (ping),Gen2 将仅考虑在针对 Ping 信标测得的特定 ping 值 difference 范围内的匹配。这为分割玩家群体提供了一个“软性”解决方案,使得能够与邻近区域进行匹配,尤其可以提高人口较少区域的匹配速度。使用 max_latency 可防止与距离较远的玩家进行匹配。

现在您可以继续执行下一步。

我们上面的示例 beacons 规则最初设置为 "difference": 50, "max_latency": 200:

  • Alice 和 Bob 将会匹配成功,因为 Beijing 被舍弃(>200),其余均在 | A-B | < 50 范围内:

    • Alice {Montreal: 12.3, Newark: 45.6, Dallas: 59.9, Beijing: 264.4};以及

    • Bob {Montreal: 27.3, Newark: 32.4, Dallas: 23.1, Beijing: 252.2}。

  • Charlie 和 Dave 将不会匹配成功,因为 Dallas 信标的 | C-D | > 50:

    • Alice {Montreal: 5.7 Newark: 44.2, Dallas: 59.5, Beijing: 263.2};以及

    • Bob {Montreal: 57.8, Newark: 32.0, Dallas: 24.2, Beijing: 272.3}。

请注意,“延迟规则”在初始配置规则中只能定义一次。

3. 查看实例详情​

新撮合器初始化后,在我们的控制面板中查看其详细信息:

Status 表示服务健康状况,可能为 ONLINE、OFFLINE 或 ERROR。

  • Identifier 有助于 Edgegap 员工在您需要排查故障时快速找到您的撮合器。

  • Started at 可用于追踪最新更新时间。

  • Size 对应我们的某一 定价层级。

  • API URL 将由游戏客户端和游戏服务器用于与 Gen2 通信。

  • Swagger URL 是我们提供的用于探索 API 规范模式的便捷 openAPI 规范图形界面。

  • Auth Token 是游戏客户端和游戏服务器用于身份验证的独一无二的机密令牌。

要使用 API 测试您的新撮合器,您将需要 Swagger URL、API URL 和 Auth Token。

现在您可以继续执行下一步。

4. 测试票证 API

首先,打开您的 Swagger URL 以在 Swagger GUI 中检查您的 openAPI 模式

点击“Matchmaker”标题下方的 /...swagger.json URL 以打开原始 JSON 模式:

将此页面作为文件保存到您的驱动器中(CTRL/CMD+S)。

打开您的 Postman 应用程序 并登录您的免费账户。

导入上一步中的 swagger.json 文件:

  • 保持选中 Postman Collection,

  • 选择 View Import Settings 并将设置 Parameter generation 更改为 Example。

确认导入,这将在左侧集合列表中显示一个名为 Matchmaker 的新集合。

View more actions,打开选项卡 Authorization 并选择:

  • Auth Type - API Key,

  • Key - “Authorization”

  • Value - 在此处插入您的 AuthToken 值,

  • Add to - Header。

按 (CTRL/CMD+S) 或点击“保存”图标以保存更改。Postman 选项卡中的橙色圆点应该会消失。

在 Matchmaker 集合中,选择 tickets 和 Create a matchmaking ticket,这将打开一个新选项卡。

选择选项卡 Body 以预览您的玩家票证请求:

注意 player_ip 设置为 null——这将自动使用添加到您请求中的 IP 地址(有关替代方案,请参阅 服务器到服务器集成),

  • profile 指的是您的 匹配配置文件,

  • attributes 包含您的撮合器规则的值,在此例中为 latencies 规则,

    • 规则 player_count 是唯一不需要在玩家票证中包含任何属性的规则。

注意:请务必参考示例的 Swagger 导入配置。 

点击 Send 并查看对您的玩家票证请求的响应:

  • id 是您唯一的匹配票证 ID,请妥善保存以备日后检查票证状态,

  • profile 确认所选的 匹配配置文件,

  • group_id 是发放给每张票证的唯一组 ID,单人玩家表示为大小为 1 的组,

    • 有关与好友或大厅一起匹配的信息,请参阅 组队加入,

  • player_ip 是解析出的玩家公共 IP 地址,无论使用何种识别方式,

  • assignment 设置为 null,表示票证尚未匹配或尚未分配给服务器,

  • created_at 提供有关玩家票证创建时间的信息,供游戏 UI 使用,

  • status 指示票证的当前状态,所有票证初始均为 SEARCHING(详情请参阅 匹配流程)。

再次点击 Send 创建第二张票证,以便我们的两位玩家匹配成功并启动服务器。

在 Matchmaker 集合中,选择 {ticketId} 和 Read a matchmaking ticket。

输入上一步响应中的票证 ID,然后点击 Send。

查看玩家票证的更新分配情况:

  • 状态首先变更为 MATCH_FOUND,同时保持 assignment 设置为 null,以表明玩家已匹配成功且正在分配服务器,

再次点击 Send 以检查您的票证,并查看玩家票证的更新分配情况:

  • 状态变更为 HOST_ASSIGNED,且 assignment 包含已分配服务器的详细信息。

 在我们的控制面板中检查您的新部署:

  • 注意每个部署都标有所有票证 ID 和配置文件,以便增强可追溯性。

尝试从您的游戏客户端连接到分配的服务器。

一旦您确认能够毫无问题地连接到部署并完成测试,请停止您的部署,以释放账户中用于下一次构建的容量。

现在您可以继续执行下一步。

5. 在游戏中集成撮合器​

Edgegap 的匹配集成了:

  • 与游戏客户端集成,以管理玩家票证,

  • 与游戏服务器集成,以:

    • 处理通过票证传递的玩家偏好,

    • 可选支持 补位 以在启动后添加或替换玩家。

对于在游戏客户端中,我们建议在整个匹配流程中通过游戏内 UI 向玩家提供票证状态更新,以获得最佳玩家体验。请参阅:

在游戏客户端中,确保处理不可重试的错误:

  • HTTP 404 Not Found - 票证已被删除,

  • HTTP 500 Internal Server Error - 服务暂时中断。

在游戏服务器中,处理玩家偏好和初始服务器上下文。无需 API 集成:

  1. 读取 注入的环境变量 (Gen2) 以检索初始玩家的匹配数据。

  2. 读取 注入的环境变量(应用程序版本) 以获取特定于版本的参数、设置(玩家容量)和机密信息。

  3. 读取 注入的环境变量(部署) 以获取部署信息,例如 IP 地址、位置等。

一旦玩家连接,游戏服务器和游戏客户端就会启动加载场景以执行同步步骤(例如选择并加载地图/场景/关卡)。我们建议使用完备的 3D 场景、类似大厅的社交 UI 或带有进度条的加载屏幕,以指示初始化正在进行中。

一旦游戏客户端完全加载,玩家就会加载/传送至主游戏场景。

可选地,游戏服务器可以创建并管理补位和玩家容量(添加或替换离开的玩家)。

在以下情况下,确保使用 注入的 DELETE_URL 正确停止您的部署:

  • 没有玩家加入比赛,

  • 所有玩家均已离开比赛,

  • 比赛正常结束。

祝贺您,您已完成 Edgegap 撮合器集成!如果您想了解更多信息,请在我们的学习中心中阅读相关的所有内容。

书写者

Edgegap团队

Get your Game Online Easily & in Minutes

立即开始集成!

轻松在线游戏
且在几分钟内