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

本指南向您展示如何使用 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 中,并将每张票证与玩家关联 | 为页面提供带有有效证书的 |
在验证每位玩家的票证后,记录游戏服务器报告的结果 | 仅在比赛运行期间对服务器计费:服务器会自动停止 |
将排行榜变更推送到每个打开的页面(实时推送) |
浏览器不保存任何机密,游戏服务器也不保存任何 Supabase 密钥。

分步指南
详细集成步骤
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 的工作室案例研究。

《以太之战 2》完美的全球发布
Aether Studios
了解Aether Studios是如何快速添加Edgegap并向他们的社区交付完美的启动和后启动服务的。
案例研究

克服因虚拟现实在竞技Multiplay中使用WiFi而引入的延迟
Halfbrick Studios
Discover how Halfbrick successfully launched & maintains a multiplayer-focused Early Access on META Quest's VR platform.
案例研究

MENA的社交应用添加了在线游戏
WOLF
了解这款在中东和北非地区广受欢迎的社交应用如何轻松地将 matchmaking 和多人游戏编排添加到 WOLF Qanawat。
案例研究

混合编排让开球策略随时应对任何流量做好准备
Birch Games
混合编排如何帮助 Birch Games 应对流量——将免流出费用的 Fleets 与无区域限制云相结合。
案例研究

7天血月
The Fun Pimps & iLLOGIKA
了解 Illogika 如何大幅降低服务器成本,并确保提供《七日杀 (7 Days to Die)》玩家所期望的在线体验。
案例研究

真实的在线战争需要终极的协调
Highwire Games
了解Highwire对性能的需求如何需要只有Edgegap才能提供的编排。
案例研究

22,000 条评价、4.8 颗星以及自动扩展的基础架构
Sinn Studios
一个由 Slack 提供支持的简单集成,如何让 Sinn Studio 的热门 VR 游戏快速上线并保持稳定运行。
案例研究

动态服务器编排
Under NDA - AAA Studio
了解世界上最大的AAA工作室之一如何通过边缘计算改善其对等多人游戏体验。
案例研究

对于 AAA 格斗游戏的近零延迟
AAA Studio - Under NDA
一个未宣布的项目如何实现了最低延迟,并改善了其1v1游戏中的公平性。
案例研究

Play Gods with Multiplayer Physics
Squido Studio
Learn how Squido uses Edgegap's highligh optimized game servers to deliver mind-bending & chaotic VR gameplay.
案例研究

全面托管的解决方案为独立游戏节省时间 多人VR恐怖游戏
Dirty Pearl Studios
了解Dirty Pearl Studios如何通过Edgegap的轻松集成和自动编排,以及其Nakama集成,节省了开发时间。
案例研究

即时全球服务器部署以促进协作式XR医学教育
AlensiaXR
AlensiaXR如何利用Edgegap为全球医学生提供低延迟、始终可用的共享解剖课程。
案例研究

守光人:具有专用服务器的 VR 社交合作游戏
Spectral Games
Spectral Games 如何在无需任何服务器经验的情况下,利用 Edgegap Matchmaking 和 Server Browser 为其 VR 社交大厅启动专用服务器。
案例研究

全球范围内快速可靠的部署,适用于PvPvE挑战者Gravebound
Crater Studios
Edgegap 的调度和配对如何帮助 Crater Studios 使他们能够将重心从基础设施转移到游戏玩法上。
案例研究

快速扩展网络元宇宙
Hiber
了解Hiber如何通过Edgegap消除服务器容量规划中的猜测。
案例研究

高硬件要求和自定义游戏服务器池
Alderon Games
了解Alderon Games如何瞬间利用全球多个供应商的自定义游戏服务器池来支持其热门MMO。
案例研究

独立开发者的简单集成
WhaleFood Games
阅读关于WhaleFood Games如何使用Edgegap解决其网络代码问题的文章。
案例研究

推动东南亚首款电子竞技游戏的尖端技术。
Anantarupa Studios
了解Edgegap如何通过一个无缝解决方案简化复杂基础设施和尖端技术,从而改变东南亚的游戏格局。
案例研究

一次打击。全球抵达。
Triple Hill Interactive
Triple Hill Interactive如何利用Edgegap的编排来提供低延迟,并提高在每毫秒都至关重要的游戏类型中的公平性。
案例研究

快节奏团队大逃杀...带着枪的动物毛绒玩具!
SANDYFLOOR
了解一家韩国独立工作室是如何将其多人游戏发布到全球的。
案例研究

移动端赛马游戏凭借即时、高效能的服务器走向全球
Mirai Labs
看 Mirai Labs 如何通过即时服务器部署和细分 vCPU 来运行 Pegaxy Blaze 的全球多人竞速游戏,从而将单个玩家的成本保持在极低水平。
案例研究

服务器管理与分发
Matrioshka Games
阅读关于Matrioshka Games如何在资源有限的情况下发布早期访问的战斗 Royale。
案例研究

听我的信号,释放地狱!
TyGames
探索独立工作室TyGames如何让玩家沉浸在第三人称角斗士战斗的多人游戏中。
案例研究

瞬时全球编排
Soliton Interactive
探索Soliton Interactive如何做到了不可能……首次推出可多人玩的版本!
案例研究

竞技游戏具有服务器端物理引擎,确保理想的低于50毫秒的延迟
NS7
了解为什么仅有Edgegap能够使独立工作室通过服务器端物理和权限实现其AAA质量的免费游戏体育玩法愿景。
案例研究

iGaming的区域部署
X1 Contra 1
X1 Contra 1 通过经济高效的托管和区域部署,为其巴西玩家提供实时 PvP 休闲游戏,确保数据和法律合规。
案例研究

仅在玩家游玩时付费:经济实惠的多人游戏基础设施
Meltdown Interactive
Edgegap 如何帮助独立开发商 Meltdown Interactive Media 在无需复杂方案的情况下,以高性价比解决扩缩容和匹配问题,从而让他们能够专注于游戏开发。
案例研究

同一个 Edgegap 平台,三种截然不同的网络配置
Warped Games
了解 Warped Games 如何在同一个 Edgegap 部署 API 和同一个容器管线上运行社交中心、实时合作以及回合制合作。
案例研究

台球大师巡回赛Max
RETA Games
案例研究

韩国的Web3 POP提取射击游戏走向全球,即刻启程
NDUS Entertainment
XOCIETY 如何轻松地添加 Edgegap 编排并集成自定义 matchmaking,与 Edgegap Ping Beacons 一起优化延迟。
案例研究

Multiplayer in Every Dimension
Arcadia.tv
Discover how Arcadia.tv uses Edgegap's edge network to deliver an innovative, team and location-based athletic VR sport.
案例研究

F2P 移动格斗游戏利用即时(Just-In-Time)服务器降低基础设施成本
Game Changers Worldwide
Game Changer Worldwide 如何在全球移动端托管 Rumble Rush 的实时 3v3 PvP 游戏。
案例研究
他们选择 Edgegap 的关键原因
了解 Edgegap 自动化游戏服务器编排如何带来无缝的多人游戏体验。









