了解Edgegap的工作原理

了解Edgegap的工作原理

Supabase

部署至 Edgegap

Supabase:如何将其用作多人游戏后端,配备专用游戏服务器和匹配功能

已发布

已发布

最近一次准确性审核

最近一次准确性审核

Supabase 集成指南:将 Supabase 用作网页游戏的后端,并结合 Edgegap 专属游戏服务器和配对系统

本指南向您展示如何使用 Supabase 作为多人游戏的后端,用于登录、玩家资料、比赛历史记录和实时排行榜,同时由 Edgegap 的专用游戏服务器运行比赛:每场比赛分配一个权威服务器,并由 Edgegap 的撮合系统在玩家附近启动。

一旦您的游戏服务器容器化,Edgegap 只需一个简单的 API 调用即可将其(按需)部署到全球 615+ 个边缘云节点,并完全按使用量计费:无需租用、配置或在比赛间隙保持运行整台服务器。对于需要预留容量的持久服务器,Edgegap 提供了 Private Fleets。在本指南中,Edgegap 的匹配会启动服务器,因此只有已登录的玩家才能寻找到比赛。

双方各司其职。Supabase 保存比赛结束后仍需保留的所有内容,并决定谁可以排队。Edgegap 将玩家分组,在他们附近启动服务器,并在比赛结束时停止计费。服务器判定比赛结果,因此玩家在浏览器中所做的任何更改都不会影响到排行榜。

是用 Lovable 构建的游戏吗? Lovable 项目本身就运行在 Supabase 上:包含登录、Postgres 数据库、Edge Functions 和 Realtime。它们缺少的是运行比赛的服务器。本指南将为您补齐这一点:在您的游戏已使用的 Supabase 后端旁,为 Edgegap 上的每场比赛配备一个权威游戏服务器。

本指南涵盖:

  • 准备您的游戏、Supabase 项目和 Edgegap 账户

  • 将您的代码智能体(coding agent)连接到 Edgegap(可选)

  • 设置 Supabase:模式(schema)、行级安全(Row Level Security)和匿名登录

  • 让游戏服务器验证玩家,然后将其容器化

  • 在本地结合 Supabase 进行比赛

  • 通过 Supabase Edge Function 添加匹配功能

  • 记录结果并展示实时排行榜

  • 使用两名玩家测试完整闭环

您可以通过两种方式来完成,也可以将它们结合使用:

  • 使用代码智能体。 将 Claude Code、Cursor 或其他智能体连接到 Edgegap MCP 服务器 及其 agent skills。edgegap-supabase 技能会编写模式、Edge Functions 以及游戏服务器的修改代码,并在获得您的许可后运行 Supabase CLI。您只需处理登录、Edgegap 控制台和游戏测试。

  • 手动操作。 以下每个步骤在没有智能体的情况下也同样适用。

本指南使用了 Supabase Sumo Push:这是 Edgegap 迷你游戏中的一款 Three.js 派对格斗游戏,具有 Supabase 登录、个人资料和实时排行榜功能。该项目于 2026 年 11 月 3 日在免费方案的托管 Supabase 项目以及 Edgegap 免费层级上进行了端到端测试。

无需信用卡。免费版包含部署真实游戏服务器所需的资源。

无需信用卡。免费版包含部署真实游戏服务器所需的资源。

分工与职责

Supabase 负责

Edgegap 负责

为玩家办理登录(匿名登录,后续可升级为电子邮箱或 OAuth)

通过匹配系统为玩家分组

存储个人资料、获胜记录和比赛历史(采用行级安全策略的 Postgres)

在每场比赛时,就近为玩家启动专用服务器

将匹配令牌保存在 Edge Function 中,并将每张票证与玩家关联

为页面提供带有有效证书的 wss:// 地址(TLS 升级)

在验证每位玩家的票证后,记录游戏服务器报告的结果

仅在比赛运行期间对服务器计费:服务器会自动停止

将排行榜变更推送到每个打开的页面(实时推送)


浏览器不保存任何机密,游戏服务器也不保存任何 Supabase 密钥。

Sumo Push, the Supabase sample browser game: the lobby with Find match and a Supabase leaderboard, and a round in play on an Edgegap game server with bots on a shrinking ring

分步指南

详细集成步骤

1. 开始之前

  • 一个免费的 Edgegap 账户。请验证您的电子邮箱。测试无需信用卡。

  • 一个 Supabase 账户。免费套餐就足够了。Supabase CLI 通过 npx 运行,因此无需安装任何内容。

  • 运行中的 Node.js 22 或更新版本,以及一个容器化工具。我们推荐 Docker Desktop。

  • 一个自带 Node.js WebSocket 游戏服务器的网页浏览器游戏。还没有服务器?从浏览器游戏指南开始:它构建了本指南所扩展的服务器。

  • 对于 Agent 路径:需要一个 Edgegap API 令牌,可从 Dashboard → User Settings → Tokens 获取。它是组织范围内的,因此请将其视为密码:切勿将其放入客户端、服务器镜像或聊天中。此设置在 Agent 之外绝不需要它。

  • 使用 Lovable 构建?开启其 GitHub 同步,以便游戏服务器可以存放在同一个代码仓库中。然后检查其后端所在位置。如果您连接了自己的 Supabase 项目,步骤 3 和步骤 6 可按原文操作。如果应用程序运行在 Lovable Cloud 上,则 Lovable 拥有该 Supabase 项目,Supabase CLI 无法访问它:请改用 Lovable 设置机密并部署函数(见步骤 6)。

快捷方式:先运行示例。克隆 Supabase Sumo Push,运行 npm install 和 npm run dev,然后在第二个终端中运行 npm run web。打开 http://localhost:8080,选择 Local server,然后打开第二个标签页与自己对战。在未配置 Supabase 的情况下,服务器允许任何人加入且不记录任何内容。

2. 将您的代码代理连接到 Edgegap

如果您全部手动操作,请跳过此步骤。

Edgegap MCP 服务器允许您的智能体在您的账户上创建应用程序和版本、部署服务器、读取日志并生成匹配器配置。edgegap-supabase 技能为其提供了通过 Sumo Push 测试的文件:数据库架构、两个 Edge 函数、游戏服务器的玩家检查以及浏览器代码。它构建于 edgegap-threejs 之上,后者包含游戏服务器本身。创建 Supabase 项目、推送架构、设置机密和部署函数会更改您的 Supabase 账户,因此智能体在执行这些操作前会进行询问。

Claude Code:安装 Edgegap 插件。它会同时添加 MCP 服务器和技能,并在安装过程中要求提供您的 API 令牌(存储在系统的凭据存储中):

/plugin marketplace add edgegap/llm-agent-skills,然后运行 /plugin install edgegap@edgegap。重启会话。

如果只需要 MCP 服务器,而不需要插件?请改在您自己的终端中运行以下命令:claude mcp add --transport http edgegap https://mcp.edgegap.dev/mcp -H "Authorization: token YOUR_EDGEGAP_API_TOKEN" --scope user。不要同时执行这两种操作,否则您将拥有两个 edgegap 服务器。

Cursor、VS Code 和其他发送请求头的客户端:添加 https://mcp.edgegap.dev/mcp 并附带请求头 Authorization: token YOUR_EDGEGAP_API_TOKEN,然后使用 npx skills add edgegap/llm-agent-skills --skill "*" 安装技能。

Claude Desktop:自定义连接器无法发送请求头,因此请改用本地服务器 (Node 22):{ "mcpServers": { "edgegap": { "command": "npx", "args": ["-y", "@edgegap/mcp"] } } }。首次使用时它会要求提供令牌。

检查是否正常工作:

“列出我的 Edgegap 应用程序。”

3. 设置你的 Supabase 项目

Supabase 负责玩家登录并保存比赛结束后仍需留存的所有内容。该示例的模式(Schema)开箱即用:调整个人资料中保存的内容以及比赛统计的项目,并保留工单检查(Ticket checks)。

  • 创建并关联项目:运行 npx supabase login,然后运行 npx supabase projects create <name> --org-id <your-org-id> --region <region> 和 npx supabase link --project-ref <project-ref>。npx supabase orgs list 会显示您的组织 ID。

  • 推送模式:npx supabase db push --remote 会应用示例的迁移:个人资料(profiles)、工单(tickets)、比赛(matches)、行级安全性(Row Level Security)以及 record_match() 函数。触发器会为每位新玩家创建一个带有随机名称的个人资料。

  • 开启匿名登录:针对为此游戏创建的项目,运行 npx supabase config push。它会推送 config.toml 中的所有身份验证(Auth)设置,因此在现有项目中,请改用控制面板:Authentication → Sign In / Providers → Allow anonymous sign-ins。

  • 将页面指向该项目:将 client/config.js 复制为 client/config.local.js,并在 Project Settings → API Keys 中填入项目 URL(Project URL)和可公开密钥(Publishable key)。可公开密钥专用于在网页端发布:行级安全性会限制其权限。

玩家无需填写表单即可获得账号。为了跨设备保留游戏进度,稍后可将电子邮箱或 OAuth 登录方式关联到该匿名玩家:玩家身份及其个人资料将保持不变。

在继续之前请检查:玩家可以更改自己的名称,但不能更改胜场数、创建工单或调用 record_match()。

与您的 Agent 配合使用:

“加载 edgegap-supabase 技能。为我的游戏创建一个 Supabase 项目,推送包含个人资料、工单、比赛和行级安全性的模式,开启匿名登录,并检查玩家是否无法更改自己的胜场数。在对我的 Supabase 账号进行任何更改之前,请先征得我的同意。”

4. 让游戏服务器校验玩家,然后将其容器化

游戏服务器不保存任何 Supabase 密钥。当玩家连接时,它会根据项目的公共签名密钥验证玩家的 Supabase 访问令牌,并在比赛结束时通过 Edge Function 和共享密钥报告结果。

  • 检查玩家:示例中的 server/supabase.js 使用 jose 库验证访问令牌,拒绝未登录的玩家,并为每位玩家保持一个连接。若未设置 SUPABASE_URL,则允许任何人进入,以便进行本地开发。

  • 签名密钥:新的 Supabase 项目使用非对称密钥对令牌进行签名。如果 https://<project-ref>.supabase.co/auth/v1/.well-known/jwks.json 未列出任何密钥,请先在控制面板中将项目切换为非对称 JWT 签名密钥。

  • 构建并推送:在通过容器镜像仓库页面获取的用户名和令牌运行 docker login registry.edgegap.com 之后,运行 docker build --platform linux/amd64 -t registry.edgegap.com/<project>/<image>:<tag> . 和 docker push。每次构建请使用时间作为标签,切勿使用 latest。

然后在控制面板中创建应用程序及其版本:

  • 您的镜像和标签。

  • 端口 7777,协议 WS,名称为 gameport,并开启 TLS Upgrade。

  • 0.25 vCPU 和 512 MB,最长持续时间设为 30 分钟作为安全保障:服务器会自动停止。

  • 环境变量:SUPABASE_URL(https://<project-ref>.supabase.co)、GAME_SERVER_SECRET(一长串随机字符串,标记为 Secret;您在步骤 6 中还会需要它)以及 REQUIRE_TICKET = 1,从而确保只有匹配到的玩家才能进入。

与您的代理配合:

“使用 edgegap-supabase 技能,将 Supabase 玩家检查和结果报告添加到我的游戏服务器中,然后将其容器化为 linux/amd64,使用新标签进行推送并创建应用版本:端口 7777,协议 WS,开启 TLS Upgrade,命名为 gameport,配置 SUPABASE_URL、加密的 GAME_SERVER_SECRET 以及 REQUIRE_TICKET=1。”

5. 使用 Supabase 在本地进行比赛

在上线之前,请检查 Supabase 和您的游戏是否可以在您的机器上协同工作:

  • 使用您的项目运行游戏服务器:SUPABASE_URL=https://<project-ref>.supabase.co npm run dev。它现在会拒绝未登录的玩家。

  • 打开页面(npm run web,然后访问 http://localhost:8080)。菜单会显示玩家生成的名称、他们的战绩以及排行榜。更改名称:它会保存到个人资料中。

  • npm test 会使用两个无头玩家进行一场完整的比赛,并检查各阶段和结果。

比赛结果仅针对匹配系统(matchmaker)的比赛进行记录,因为它们需要门票。这就是下一步。

6. 通过边缘函数(Edge Function)添加匹配功能

浏览器绝不会直接调用 Edgegap 的匹配系统。由 Supabase Edge Function 保存匹配系统的令牌、检查玩家会话并将每张票证与玩家绑定,因此只有已登录的玩家才能排队。

  • 创建匹配器:在示例的 edgegap/matchmaker-config.json 中,设置您的应用程序名称和版本。其配置文件是一个 2 到 8 名玩家的大乱斗模式,单个玩家在 20 秒后即可匹配成功,空缺位置由机器人填补。在控制面板中,打开 Matchmaker,选择 Create Matchmaker,上传该文件并选择 Create and Start。复制其 API URL 和 Auth Token。

  • 将它们存储在 Supabase 中:npx supabase secrets set EDGEGAP_MM_URL=<API URL> EDGEGAP_MM_TOKEN=<Auth Token> GAME_SERVER_SECRET=<与步骤 4 相同的密钥>。

  • 部署函数:npx supabase functions deploy matchmaking 和 npx supabase functions deploy report-match。两者都会自行验证其调用者:matchmaking 使用玩家的会话进行验证,report-match 使用共享密钥进行验证。

然后,“寻找比赛”通过对 matchmaking 函数的三次调用来工作:join(独自搜索的玩家即为一个单人组;它会取消之前的任何搜索)、status(页面每 1.5 秒询问一次,并在分配服务器后获取 wss:// 地址)和 cancel。在搜索中途关闭页面也会将其取消,这样遗留的搜索就不会启动一个无人加入的服务器。

配合您的智能体:

“使用 edgegap-supabase 技能,将我的匹配器的 API URL 和 Auth Token 作为 Supabase 机密部署 matchmaking 和 report-match 这两个 Edge Function,并将页面中的‘寻找比赛’连接到 matchmaking 函数,并在页面关闭时取消。”

使用 Lovable Cloud?supabase secrets set 和 supabase functions deploy 命令无法访问 Lovable Cloud 项目。请改在 Lovable 的 Secrets 面板中添加 EDGEGAP_MM_URL、EDGEGAP_MM_TOKEN 和 GAME_SERVER_SECRET,并让 Lovable 部署 matchmaking 和 report-match 函数。该路径尚未进行端到端测试。

7. 记录成绩并显示实时排行榜

  • 结果由服务器决定。玩家仅发送输入操作。服务器掌握位置、回合以及获胜者信息。

  • 由服务器进行报告。比赛结束时,它会使用共享密钥将结果发送至 report-match 函数。record_match() 仅接受持有自身有效且未使用凭证的玩家,因此即使密钥泄露,也无法授予胜场或重放比赛。

  • 排行榜实时更新。Supabase Realtime 会将个人资料的变更推送到每个打开的页面。

可将该页面托管在任何提供静态文件服务的平台:GitHub Pages、Netlify、Vercel 或 Supabase Storage。如果您之后添加了电子邮件或 OAuth 登录方式,请在“Authentication → URL Configuration”下添加该网站的地址。

8. 由两名玩家测试完整循环

  • 确保没有测试部署仍在运行。在免费层级中,遗留的部署会阻止匹配系统的部署。

  • 在具有不同配置文件的两个浏览器窗口中打开该页面,或者使用一个无痕窗口:同一配置文件的两个窗口会共享一个 Supabase 会话。

  • 在 20 秒内于两个窗口中均选择查找比赛。两者都会进入同一个 Edgegap 服务器。

  • 比赛结束时,排行榜会在两个页面上更新,并且服务器会停止自身的部署。在我们的测试中,它在比赛结束后 14 秒停止。

如需在没有浏览器的情况下进行测试:SUPABASE_URL=… SUPABASE_PUBLISHABLE_KEY=… node tools/e2e.mjs 2 会登录两个无头玩家,在 Edgegap 上进行一场完整的比赛,从 Supabase 读取结果,并检查服务器是否已自行停止。

在启动之前:在匹配系统配置中将 inspect 设置为 false,为玩家从未加入的服务器降低 FIRST_JOIN_TIMEOUT_S,允许玩家关联电子邮箱或 OAuth 登录,并清理旧的 tickets 行。默认情况下,Supabase 将每个 IP 地址每小时的匿名登录次数限制为 30 次。

在免费层级中,匹配系统在每次启动 3 小时后停止(需从控制面板重新启动),且一次只能运行一个部署。尚未测试:Node.js 以外的游戏服务器(Unity、Godot、Unreal)检查 Supabase 令牌,以及电子邮箱或 OAuth 登录。

后续步骤

后续步骤

准备上线?让您的代理运行 edgegap-launch 技能清单。

遇到问题?让您的代理加载 edgegap-troubleshoot,或者在 Edgegap Discord 上向我们的团队和其他工作室寻求帮助。

常见问题

关于将 Supabase 用作游戏后端并搭配 Edgegap 专属游戏服务器的常见问题。

Supabase 可以托管我的实时游戏服务器吗?

Supabase 运行您的数据库、登录、Edge Functions 以及 Realtime 实时更新。而实时比赛则需要一个进程在靠近玩家的地方为整场比赛运行游戏规则。Edgegap 正是负责运行该进程——每场比赛一个,并在比赛结束时将其停止。

游戏服务器需要 Supabase 密钥吗?

不。它会根据您项目的公钥签名来验证每个玩家的访问令牌,并通过带有共享密钥的 Edge Function 报告结果。您的 Supabase 密钥永远不会离开 Supabase。

玩家能通过作弊登上排行榜吗?

游戏服务器决定每一个结果,行级安全性(Row Level Security)阻止玩家修改自己的胜场,而 record_match() 仅接受持有本人且未使用的匹配票据的玩家。

玩家需要创建账户吗?

无需填写表单:首次游戏时自动匿名登录,使用同一浏览器再次访问时仍作为同一玩家继续。稍后可绑定电子邮件或 OAuth 登录方式,以便在不同设备间同步游戏进度。

这是否适用于 Unity、Godot 或 Unreal 游戏服务器?

架构、Edge Functions 和匹配查找(Find Match)流程都是相同的,均基于 HTTP。游戏服务器需要一个 JWT 库,用于根据项目的签名密钥验证 ES256 令牌。目前仅 Node.js 服务器在 Edgegap 上进行了测试。

我可以将此用于在 Lovable 中构建的游戏吗?

是的。Lovable 项目使用 Supabase 作为后端,因此本指南中的登录、数据库和 Edge Function 部分完全适用。将项目同步到 GitHub,添加游戏服务器,并将其托管在 Edgegap 上。连接你自己的 Supabase 项目后,按照文中所写的步骤操作即可。在 Lovable Cloud 上,请在 Lovable 的 Secrets 面板中设置机密,并让 Lovable 部署这些函数:Supabase CLI 无法访问这些项目,而且日后若要将其迁移到你自己的 Supabase 账户,则需要手动进行迁移。这些步骤已使用 Sumo Push 示例进行过测试,但尚未在 Lovable 项目中测试过。

客户

了解更多已接入 Edgegap 的客户案例

提供 31 个从其他平台迁移至 Edgegap 的工作室案例研究。

他们选择 Edgegap 的关键原因

了解 Edgegap 自动化游戏服务器编排如何带来无缝的多人游戏体验。

费用

定价

定价

通过混合编排优化成本与性能

通过混合编排优化成本与性能

通过混合编排优化成本与性能

边缘云

按需

$0.00115

/ vCPU

/ 分钟

按分钟计费,仅按实际使用量收费

只有在玩家在线玩游戏时才需付费。0 个活动服务器 = $0

在全球 615 多个边缘云节点中按实例部署游戏服务器。零承诺。

只需添加信用卡。

边缘云

按需

$0.00115

/ vCPU

/ 分钟

按分钟计费,仅按实际使用量收费

只有在玩家在线玩游戏时才需付费。0 个活动服务器 = $0

在全球 615 多个边缘云节点中按实例部署游戏服务器。零承诺。

只需添加信用卡。

专属物理机集群 (裸金属)

预留容量

$0.0261

/ vCPU

/ 小时

按月计费,始终开启

每个主机每月 $280(12个月标准价),或按月支付每月 $350

通过无出站流量费用的专用机队托管,优化您游戏服务器的成本效益。

持久在线,24/7全天候可用,您的工作室专属。

专属物理机集群 (裸金属)

预留容量

$0.0261

/ vCPU

/ 小时

按月计费,始终开启

每个主机每月 $280(12个月标准价),或按月支付每月 $350

通过无出站流量费用的专用机队托管,优化您游戏服务器的成本效益。

持久在线,24/7全天候可用,您的工作室专属。

您的账单因费率和使用量而异;这可能会根据游戏类型、玩家人数等因素而有所不同。

您的账单因费率和使用量而异;这可能会根据游戏类型、玩家人数等因素而有所不同。

使用我们的预估计算器模拟您的用量 ->

使用我们的预估计算器模拟您的用量 ->

Edgegap 的功能与价格:边缘云与私有集群(Private Fleets)详细对比

Edgegap 的功能与价格:边缘云与私有集群(Private Fleets)详细对比

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。