For the complete documentation index, see llms.txt. This page is also available as Markdown.

服务器浏览器

快速开始使用 Server Browser,并探索各种类型的示例场景。

Server Browser 是一项托管服务,用于 部署持久化 服务器:

  • 帮助玩家搜索并加入合适的服务器 ,基于容量、延迟或游戏参数;

  • 预热新服务器 以便在全球范围内大规模服务玩家并避免令人沮丧的排队;

  • 简化服务器运维 包括更新、重启、持久化、网格化等。

✔️ 准备工作

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

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

本教程假定您已经:

功能与流程

Server Browser:流程与层级

Server Browser 提供两个主要功能:

服务器浏览器 与游戏客户端配合以:

  • 发现并找到合适的服务器实例,查看槽位,并预留可用容量。

  • 在实例槽位中预留座位,获取连接信息,并连接到服务器。

  • 使用以下方式在部署中验证玩家连接: 联邦身份认证.

  • 更新实例槽位的可用容量和/或元数据,以修改发现条件。

服务器浏览器 (可选)与扩缩容策略配合以:

  • 按区域和/或其他条件监控可用服务器实例、槽位和容量。

  • 通过预热或即时扩缩容部署服务器以增加容量。

  • 使用针对演示、更新、测试、QA、锦标赛等的特殊策略自动化运维。

发布后, 你的 Server Browser 需要全天候 24/7 运行 以确保全球玩家都能加入服务器。

▶️ 开始浏览

了解服务器/玩家生命周期及其职责,以确保高效使用服务器。

认证

所有请求必须发送一个 Authorization(授权) HTTP 头并包含您的密钥 认证令牌:

Server Browser 会自动生成两种令牌:

发现实例

请参阅 服务器浏览器 了解扩缩容策略并自动启动部署。

所需信息 每个服务器实例包括:

  • 在初始化实例时定义至少一个槽位,

  • 服务器连接详情 - URL、IP、端口信息和位置。

可选的自定义元数据参数 用于玩家筛选、排序和浏览;例如:

  • 槽位信息 - 队伍容量和队伍特定元数据(例如队伍名称),

  • 名称和标签 - 可自定义、唯一、可读且可搜索的标识;

  • 兼容性数据 - 服务器版本或支持的客户端版本;

  • 延迟限定信息 - 城市和区域标识符,以及分配的 Ping 信标 详情;

  • 游戏参数 - 关卡/场景/地图、游戏模式、难度、所用模组;

  • 任何其他可帮助玩家筛选并找到合适服务器的自定义参数。

以上元数据参数仅为示例,你可以根据需要定义任意数量的参数。

服务器可以 随时更新实例或槽位元数据 以修改其可发现性条件。更新元数据时,所有索引键都必须提供有效值(即使未修改)。

服务器实例必须定期发送保活心跳 以验证其持续可用性,并防止玩家加入崩溃或离线的服务器。在配置的过期时间内未收到心跳,将自动删除该实例及任何待处理的座位预留。

请参阅 持久化 用于管理持久世界状态,以及 应用与版本 用于更快的部署。

分配容量

实例和槽位容量可通过两种方式分配,可单独使用或组合使用:

自动分配预留

如果你希望 自动选择服务器,基于区域容量。

玩家可以创建自动分配预留,只需提供玩家 ID 和扩缩容策略名称。Server Browser 会自动找到一个具有足够可加入容量的槽位的实例并预留座位,同时立即返回实例连接详情。

如果此预留没有合适的实例槽位,响应:

  • 状态码指示该策略是否正在扩容 以及是否会增加更多容量,

  • 响应头 Retry-After 表示重试前的等待时间(秒),如果可重试。

预留完成后,你可以跳到 服务器浏览器.

搜索与浏览

如果你希望 向用户显示服务器列表,并允许自定义预留.

玩家可以列出服务器实例并 对结果进行分页浏览 以找到他们想要加入的服务器。

实例和槽位可以使用内置参数或 索引元数据:

属性
数据类型
实例
槽位

request_id

字符串

total_joinable_seats, total_available_seats

整数

name

字符串

available_seats, reserved_seats

整数

created_at, updated_at

字符串

metadata.{index} (自定义)

字符串, 整数, 浮点数, 布尔值

可用的筛选运算符取决于被筛选属性的数据类型:

参数
运算符
示例筛选(基于简单示例)

字符串

eqne

ltle

gtge包含

整数, 浮点数

eqne

ltle

gtge

布尔值

eqne

了解基于游标的 服务器浏览器 以便让用户获取更多结果。

预留座位

在加入服务器之前,需要先进行座位预留,以确保实例提供足够的可用容量。预留可以包括一组玩家或单个玩家。

联邦身份认证:玩家必须在其预留中提供唯一的第三方玩家 ID。当他们之后发送相同的 ID 时, 服务器浏览器 将允许服务器验证其身份。

一旦预留成功完成(200 OK),玩家应立即尝试连接。未确认的 预留会在 30 秒后过期(可配置),除非 由你的服务器确认。

超过槽位可加入座位容量的预留将被自动拒绝 (409 Conflict)。可加入座位是指尚未被其他玩家预留的所有可用座位。

服务器可以强制更改任何槽位的容量,并添加、删除或更新任何槽位。 如果任何待处理预留超出新的槽位可用容量,则该给定槽位的所有预留都将被移除。

连接到服务器

一旦玩家找到合适的实例,他们 从中获取所需的连接详情 (URL 或 IP, 外部端口)。一旦完成座位预留, 玩家便可以连接到你的部署中的游戏服务器并传递其玩家 ID.

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

将你的 Unity 编辑器连接到 游戏客户端 你的云部署,请输入:

  • 部署 URL 指向服务器 IP,通常在 NetworkManager 组件中。

  • 外部端口 映射到 服务器的内部监听端口,通常在 Transport 组件中。

要验证新的连接, 你的服务器必须发送批量预留确认 请求,其中包含所有新玩家的 ID,并在确认响应中接收信息:

  • 将已接受的玩家预留分配到其首选槽位,

  • 将已过期的玩家预留分配到其首选槽位,

  • 未知玩家 ID 列表。

你的 服务器可以决定如何处理每一组玩家 以及是否允许或踢出/封禁已过期或被拒绝的用户。每个 实例的槽位都必须立即更新新的可用座位数 以确保未来的预留不会超过槽位容量。

放弃服务器

当玩家离开时,你的服务器必须增加分配槽位的可用座位容量。

阅读关于 持久化 以防止令人沮丧的持久服务器回滚。

🚀 自动扩缩容

Server Browser 兼容多种不同的自动扩缩容方式:

以下指南将重点介绍 使用扩缩容策略进行预热 作为主要方法。

监控容量

扩缩容策略会持续刷新你的服务器实例列表(已发现的部署),并每隔 monitoring_interval 。每个策略都需要使用与 筛选语法 相同的筛选条件——按区域、容量或其他条件。

你配置的 minimum_active_instances 数量可被视为以下任一项:

  • 固定容量 你希望始终保持运行的部署数量,

  • 预热待机 用于掩盖初始化延迟的部署缓冲。

固定容量

为以下类型的游戏保持固定数量的活跃服务器: 持久化,尤其是在这类游戏允许玩家自行预置的情况下 持久化.

这种策略配置有时也用于质量保证、锦标赛、封闭 Alpha、发行商演示或其他有限容量的活动和运维。

扩缩容策略可帮助你自动重启并即时回收崩溃的服务器。

预热待机

在玩家需求到来之前启动服务器,如果:

  • 你正在发布大型版本,并预计短时间内会有大量玩家涌入,

  • 或者服务器初始化需要超过 30 秒(不包括部署时间),

  • 或者游戏实现了需要分层或环形网络依赖的网格化策略。

部署服务器

当受监控的服务器实例数量 低于配置的最小活跃实例数时,新部署将自动启动。所有部署都会立即请求,并在 deployment_registration_period 经过后,每个监控间隔都会无限重试。

策略可通过以下方式启动部署: 私有舰队 (通过 Overflow 到 Cloud)或直接到 Cloud。

可用参数包括(参见 API 规范):

  • 应用和版本 - 构建版本、资源和其他编排参数,

  • 用户 - 一组用于首选的地理坐标 服务器部署位置,

  • 私有主机 ID - 云端可留空,或指定所需区域内的主机,

  • 标签 - 使用策略名称作为标签,以便日后查找通过此策略启动的部署,

  • 环境变量 - 向服务器传递自定义参数和密钥,

  • Webhook - 将部署生命周期事件通知你的游戏后端(或匹配器),

  • 需要缓存位置 - 如果你只希望在已缓存的位置获得更快的部署。

示例策略

可根据需要测试并修改这些策略。大多数游戏会使用多个策略。

一种简单策略,用于始终保留一台服务器用于测试。

在发布前提前启动 10 倍部署,以应对需求。按各区域复制。

每个区域会在可用容量低于阈值时增加部署。

每位服务器所有者一个策略,传入用于服务器认证的自定义密码。

每个服务器组一个策略。游戏后端启动一个主节点,由它生成副本。每个节点都会读取注入的网格组 ID,并搜索其他节点进行组网。

⚙️ 配置

Server Browser API 由你在创建新的(或快速重启)Server Browser 时指定的 JSON 配置生成。你可以指定服务器和槽位过期时间,以及自定义元数据:

为获得最佳性能,请避免为未用于筛选或排序的元数据指定索引。未索引的参数仍可通过服务器实例或槽位详情 API 方法进行设置和读取,见 📗 API.

☁️ 托管集群

Server Browser 由 Edgegap 便捷地全天候 24/7 托管和管理。

选择最适合你目标的托管方案:

  • 免费集群(共享) 用于测试所有功能并探索与您的设计的协同效应,

    • 会在 3 小时后自动关闭,需要重启才能继续测试。

  • 私有集群 (专用) 以确保为您的生产需求提供稳定的环境,

    • 选择您的区域并为实时游戏获得 24/7 支持,以便自信发布。

私有集群等级

我们目前提供 3 个私有集群等级 以满足每个人的需求:

等级
爱好者等级
工作室等级
企业等级

最适合用于

爱好者, 独立开发者

商业发布

高流量上线

资源

1 vCPU + 2GB 内存

6 vCPU + 12GB 内存

18 vCPU + 48GB 内存

冗余

1 个虚拟节点

3 个虚拟节点

3 个虚拟节点

限流(请求/秒)

200

750

2,000

价格,每小时

$0.0312

$0.146

$0.548

价格,30 天 (持续使用)

$22.464

$105.12

$394.56

只需点击一次即可升级到私有集群,享受由 Edgegap 团队维护的高可用托管,并为公开发布的游戏提供 24/7 实时支持。

你的实例资源需求将取决于以下因素:

  • 玩家数量 - 更多玩家会产生更多 API 请求,

  • 每位玩家的请求数量 - 更快的重试会增加服务负载并消耗资源,

  • 服务器数量 - 更多服务器会导致存储更多数据并产生更多 API 请求,

  • 客户端重试回退逻辑 - 使用带抖动的退避重试有助于分散流量峰值,

  • 平均对局时长 - 更短的会话需要更频繁地与服务器浏览器交互。

我们的集群使用配备 AMD/Intel CPU 的云主机,主频为 2.4 - 3.2 GHz。

📗 API

考虑为以下用途使用我们的 SDK Unreal EngineUnity 以便借助预置示例快速上手。

游戏客户端和专用服务器会在其生命周期内向 Server Browser 发送 API 请求。

Unity/Android - 考虑 使用原始字符串插值 以防止对硬编码 JSON 的代码剥离。

导入 API 规范到 Scalar API Web 客户端Swagger Editor 以查看详情。

速率限制

为保护你的集群不超过突发容量并避免崩溃,我们限制每个客户端公共 IP 地址每秒可发送的请求数量。

该限制由以下项配置: 服务器浏览器 参数 rate_limits.per_client_ip.

负载测试

在类似生产环境中进行负载测试会产生部署托管成本。请参见各层级对应的资源和价格 我们的定价页面.

在设计负载测试时, 请考虑真实的玩家行为模式:

真实场景
不现实的流量模式

✅ 玩家逐步加入游戏,在数小时内逐渐提升请求/秒。

❌ 所有玩家协调一致,在完全相同的一秒内访问 API。

✅ 玩家在重试之间等待的时间逐步增加(例如 1s-5s-10s-10s)。

❌ 所有玩家在收到后立即重试 429 请求过多 响应。

✅ 大多数玩家会在较短时间内(10-60 秒)收到分配并停止轮询。

❌ 所有玩家在收到分配后仍会继续轮询一段固定时间。

✅ 大多数玩家在重新开始新会话之前会先完成当前游戏(需要一些时间)。

❌ 所有玩家在收到服务器分配后立即重新开始新的会话。

✅ 峰值流量每天持续约 6 小时,之后部分时区的流量会下降。

❌ 峰值流量全天 24 小时持续,所有玩家日夜不停地玩。

负载下的行为

如果任何客户端达到配置的按 IP 速率限制,它们将收到一个 429 请求过多 响应,并应以逐渐增加的回退间隔进行重试。

如果缩放策略触发的部署数量超过你组织允许的 req/s 限制,你的服务器浏览器将每个监控间隔自动重试,并使用基于计划部署数量的加权轮询策略,尝试在所有缩放策略之间均匀分配可用的部署配额。

分页

Server Browser 提供游标分页,以按特定顺序增量获取筛选后的数据。 这种方式在获取更多结果时需要传入游标(起始点)和页大小(响应项目数量),而不是传统的 limit-offset 分页。

结合我们为游戏服务器元数据开发的专有数据库索引系统,游标分页为筛选高度动态的数据提供了快速、一致且灵活的用户体验。

我们的目标是让用户在第一页就找到合适的服务器。为获得最佳体验,我们建议显示前几页的缓存结果,并且只在用户点击搜索时刷新结果。

🔖 更新日志

语义化版本控制

我们的开发者工具和托管服务使用官方 语义化版本控制,表明哪些更新是✅安全的(次要、补丁),哪些可能包含⚠️破坏性更改(主要)。

一旦某个版本发布,它将永远不会被修改/更改.

Server Browser 的最新版本是 1.0.0 . 请留意 更新和公告.

最后更新于

这有帮助吗?