
如何为社交多人游戏添加配对功能
Edgegap 的 匹配器 是一个完全托管、可无限定制的匹配系统,能够最优地将全球玩家分组——在您开发社交多人游戏期间使用是免费的。
它也是我们所知道的唯一一个具有 基于延迟的匹配规则 的匹配系统,为您的游戏提供理想的在线多人体验,无论您使用何种引擎(Unity、Unreal 等)或游戏服务(EOS、UGS、PlayFab、Heroic Labs Nakama、Braincloud 等)。
由于我们的匹配器基于参数,因此无需编写代码。因此,集成非常简单,如有需要,我们的 入门指南 会在每一步中指导您。
当您的游戏上线时,由于我们的匹配系统是完全托管的,您无需处理基础设施、错误、停机、可扩展性或数据库管理。我们为您处理所有事务,使您的 DevOps 工作量减少到几乎为零。
如何将匹配系统整合到您的社交多人游戏中
-> 本文基于 匹配文档。如果您遇到问题或差异,请确保参考 原始指南,因为它们更频繁地保持最新。
以下示例将帮助您测试核心 匹配 玩家流程,即:
将我们的匹配器实现到您的游戏中有 五个步骤:
第一步是 创建一个账户 并使用我们的社交游戏示例。 瞧,您(从技术上讲)已经完成了一半!您只需将匹配器集成到您的游戏中(见步骤 5)。
现在,您绝不要盲目遵循在互联网上找到的 JSON 示例,因此强烈建议将上述规则调整为您的回合制游戏。步骤 2(“探索配置”)是我们的 “如何阅读”,深入了解每个 匹配 规则 函数(“探索配置”)。
步骤 3(“查看实例详细信息”)涵盖您的个人特定 匹配器 ,以确保它已部署并与您游戏的设计配合良好。
步骤 4,如其名所示(“4. 测试票据 API”),主要是测试玩家的匹配请求是否被匹配器接收,称为 票据。
步骤 5(“将匹配系统整合到您的游戏中”)强调如何在您引擎的项目中整合匹配器。
如果您遇到故障排除挑战,我们的深入 学习中心 提供额外的故障排除提示。
1. 设置免费层
注册您的免费 Edgegap 账户,并导航到 匹配器仪表板页面。
从那里,首先点击 创建匹配器 ,然后输入:
您的匹配器的名称 – 仅供您参考,例如
quickstart-dev
,然后,上传以下简单示例作为您社交多人游戏的 JSON 配置:
(小提醒,请确保更改应用程序 名称
和 版本
以匹配您的 应用程序和版本!)
如果没有验证错误出现,点击 创建并开始 并等待过程完成。这将导致一个新的免费集群启动,带有您的简单示例匹配器。
您现在可以继续到下一步。
2. 探索配置
独特的多人社交游戏规则
团队数量为 1,团队规模为 50,每场游戏需要 50 名玩家(所有玩家在同一团队中)。
特别针对社交游戏,您可以为特定游戏模式定义 匹配配置文件 的规则和设置:
让玩家提供他们的游戏模式偏好,并选择一个适合每个人的模式,
以组名义加入,用于预先创建的大厅或在不超过团队人数的情况下填充团队,
添加 🗺️ 地区选择 UI,限制对手到指定区域,
允许更高的延迟,以优先考虑更多玩家的更快比赛,
在允许更多玩家时,使用不同的 🏷️ 应用程序版本 分配更多 CPU 或内存。
扩展限制 以确保快速比赛:
迅速放松延迟限制以找到更多玩家,
逐渐减少团队规模以要求更少的玩家并更早开始游戏,
可选地,您可以让服务器用 AI 玩家填补空位,
如果没有找到队友,单人游戏并使用 后填充 稍后添加玩家,
这将允许玩家在现有比赛中加入,而不是新比赛,以最大化社交互动。
语义版本控制
当我们发布对匹配器的更新时,每个新版本使用 语义版本控制 以清晰地传达更改的影响,通过解释格式 major.minor.patch
:
major
版本包括重大更改,并且需要整合审查,minor
版本包括显著向后兼容的改进,patch
版本包括错误修复和小的改进。
某些 部署可能会导致错误。我们尝试通过自动重试部署最多 max_deployment_retry_count
次来解决此问题(无需客户端确认)。
为确保意外的客户端崩溃或被遗弃的票据不会滞留并占用您的匹配器资源,票据将在 ticket_expiration_period
后被取消,状态更改为 CANCELLED
,然后在 ticket_removal_period
后永久删除。
我们的匹配逻辑的核心配置在 匹配配置文件中。每个配置文件都是一个完全隔离的匹配队列,指向具有预定义所需 CPU 和内存(RAM)资源数量的 应用程序版本。
匹配规则 在初始规则集中必须得到满足,以便将玩家分组在一起,每个规则由三个属性定义:
您选择的名称,例如 -
匹配大小
,规则类型,也称为操作符,例如 -
player_count
,最后是运算符属性,例如
team_count
或team_size
。
玩家数量规则
这是一个特殊规则,定义了需要匹配多少玩家才能启动分配:
team_count
指团队数量,1 个团队可以用于合作或自由模式,team_size
指 每队的玩家数量。
我们的简单示例演示了一个具有 2 名玩家的合作游戏。
请注意,“玩家数量”规则 是必需的,并且只能在您的初始配置规则中定义一次。
延迟规则
使用此规则为所有玩家提供尽可能低的延迟。当客户端测量并提交他们的往返时间(延迟)与所有可用的信标时,Gen2 只会考虑在特定的 difference
延迟值内的匹配,测量与 延迟信标。这提供了一种“软”解决方案,来分割您的玩家基础,使得与附近地区的匹配成为可能,特别是提高了人口较少地区的匹配速度。使用 max_latency
来防止与太远的玩家匹配。
您现在可以继续到下一步。
我们的示例 信标
规则如上,使用 "difference": 50, "max_latency": 200
最初:
Alice 和 Bob 将匹配,因为北京被丢弃(>200),其余均在 | A-B | < 50 范围内:
Alice {Montreal: 12.3, Newark: 45.6, Dallas: 59.9, 北京: 264.4}; 和
Bob {Montreal: 27.3, Newark: 32.4, Dallas: 23.1, 北京: 252.2}。
Charlie 和 Dave 将不匹配,因为 | C-D | > 50 用于达拉斯信标:
Alice {Montreal: 5.7 Newark: 44.2, Dallas: 59.5, 北京: 263.2}; 和
Bob {Montreal: 57.8, Newark: 32.0, Dallas: 24.2, 北京: 272.3}。
请注意,“延迟规则” 只能在您的初始配置规则中定义一次。
3. 查看实例详细信息
查看您的新匹配器在初始化后的仪表板上的详细信息:

状态 指示服务健康,可能为 ONLINE、OFFLINE 或 ERROR。
标识符 可帮助 Edgegap 工作人员快速找到您的匹配器,以防您需要故障排除的帮助。
启动时间 可以用于追踪最新的更新时间。
大小 对应于我们的 定价层。
API URL 将被游戏客户端和游戏服务器用于与 Gen2 通信。
Swagger URL 是我们提供的便捷的 openAPI 规范 GUI,用于探索 API 架构。
身份验证令牌 是一个独特的秘密令牌,由游戏客户端和游戏服务器用于身份验证。
要使用 API 测试新的匹配器, 您需要 Swagger URL、API URL 和身份验证令牌。
您现在可以继续到下一步。
4. 测试票据 API
首先, 打开您的 Swagger URL 以检查在 swagger GUI 中的 openAPI 架构
单击“匹配器”标题下的 /...swagger.json
URL 以打开原始 JSON 架构:

将此页面另存为您驱动器上的文件 (CTRL/CMD+S
)。
打开您的 Postman 应用程序 并登录到您的免费帐户。
从上一步导入您的 swagger.json
文件:
保持 Postman 集合 选中,
选择 查看导入设置 并将设置 参数生成 更改为 示例。
确认导入,这将导致在左侧集合列表中出现一个以“匹配器”命名的新集合。

查看更多操作,打开 授权 选项卡并选择:
身份验证类型 - API 密钥,
密钥 - “授权”
值 - 在此处插入您的 AuthToken 值,
添加到 - 头部。
按 (CTRL/CMD+S
) 或保存图标以 保存更改。您 Postman 标签中的橙点将消失。
在您的匹配器集合中,选择 票据 并 创建匹配票据,打开一个新标签。
选择选项卡 正文 以预览您的 玩家票据请求:
注意 player_ip
设置为 null
- 这将导致请求中自动添加 IP 地址(见 服务器到服务器集成 以获取替代方案),
profile
指您的 匹配配置文件,attributes
包括您匹配器规则的值,此情况为latencies
规则,规则
player_count
是唯一不需要任何属性的玩家票据的规则。
注意:请确保查阅示例的 Swagger 导入配置。
单击 发送 并查看您玩家票据请求的响应:
id
是您的唯一匹配票据 ID,请保存此值以便稍后检查您的票据,profile
确认选择的 匹配配置文件,group_id
是分配给每个票据的唯一组 ID,单个玩家表示为一组 1,见 以组名义加入 以便与您的朋友或大厅进行匹配,
player_ip
是玩家的解析公共 IP 地址,无论使用何种识别方法,assignment
设置为 null 以指示票据尚未匹配或分配到服务器,created_at
提供有关创建玩家票据的时间的信息,以供游戏 UI 使用,status
指示票据的当前状态,所有票据开始时为SEARCHING
(见 匹配过程 以获得详细信息)。
通过再次点击 发送 创建第二个票据,以便我们的两个玩家匹配并启动一个服务器。
在您的匹配器集合中,选择 {ticketId} 并 读取匹配票据。
输入步骤响应中的票据 ID 并单击 发送。

检查您玩家票据的更新分配:
状态变为
MATCH_FOUND
,同时将assignment
保持为null
以指示玩家已匹配且服务器正在分配,

再次单击 发送 检查您的票据,并查看您玩家票据的更新分配:
状态变为
HOST_ASSIGNED
,并且assignment
包含已分配服务器的详细信息。
请注意,每个部署都标记了所有票据 ID 和配置文件,以增加可追溯性。

尝试从您的游戏客户端连接到已分配的服务器。
一旦您确认可以顺利连接到您的部署并完成测试, 停止您的部署 以释放您账户的容量用于下一个构建。
您现在可以继续到下一步。
5. 在您的游戏中整合匹配器
Edgegap 的匹配系统集成:
对于 游戏客户端,我们建议在整个 匹配过程 中使用游戏内 UI 向玩家提供票据状态更新,以获得最佳玩家体验。见:
Edgegap - Unity Gen2 匹配 SDK,
导入简单示例 并根据您的需求进行自定义,
Betide Studio - 虚幻引擎 Edgegap 集成工具包,
下载示例项目 并根据您的需求进行自定义。
在 游戏客户端中,确保您处理不可重试的错误:
HTTP 404 找不到
- 票据已被删除,HTTP 500 内部服务器错误
- 临时服务中断。
在 游戏服务器中,处理玩家偏好和初始服务器上下文。无需 API 集成:
读取 注入的环境变量 (Gen2) 以检索初始玩家的匹配数据。
读取 注入的环境变量 (应用版本) 以获取特定于版本的参数、设置(玩家容量)和秘密。
读取 注入的环境变量 (部署) 以获取部署信息,例如 IP 地址、位置等。
一旦玩家连接, 游戏服务器和游戏客户端 启动加载场景以执行同步步骤(例如,选择和加载地图/场景/关卡)。我们建议一个完整的 3D 场景,一个大厅式的社交 UI,或者一个带进度条的加载屏幕,以指示初始化正在进行。
一旦 游戏客户端 完全加载,玩家将加载/前往主要游戏场景。
可选地, 游戏服务器 可以创建并管理 后填充 和玩家容量(添加或替换离开的玩家)。
确保您的 部署将被正确停止 使用 Injected DELETE_URL,如果:
没有玩家加入比赛,
所有玩家已离开比赛,
比赛正确结束。
恭喜,您已完成 Edgegap 匹配器的集成!如果您想了解更多,请在我们的 学习中心 中阅读所有内容。
书写者
Edgegap团队