cloudflare-durable-objects
Cloudflare Durable Objects 全套最佳实践、避坑指南。
评分明细
适用场景
cloudflare-durable-objects 快速入门
把”边缘计算 + 状态持久化”做成像写普通对象一样自然,让实时协作 / WebSocket 应用不再难。
这是什么?解决什么问题?
Serverless(无服务器)最大的痛点是什么?——没有状态。云函数每次启动都是干净的,想做 WebSocket 聊天、在线协作、实时游戏、计数器,都要外挂 Redis 或数据库,延迟和复杂度都上去了。
Cloudflare Durable Objects(DO)是 Cloudflare Workers 平台上的一种特殊对象,它把”计算 + 状态 + 网络”绑在一起:每个 DO 实例有自己独立的 SQLite 存储,有唯一 ID,可以在边缘节点就近响应,支持 WebSocket 长连接。简单说,你可以把 DO 理解为”全球分布的、状态自包含的微型服务”。
cloudflare-durable-objects Skill 是社区维护的最佳实践合集,价值在于:把 DO 开发里那些”文档不写但线上一定踩”的坑(20+ 已知 bug、SQLite 迁移、hibernation API、跨区域一致性)整理成可被 AI 调用的知识库。AI 在帮你写 DO 代码时,会主动提示”这里要 catch 哪些异常”、“hibernation 必须先 setWebSocketAutoResponse”等关键细节。
适合:做实时协作白板、多人在线游戏、即时聊天、分布式计数器、限流器、跨区域分布式锁等场景的工程师。
准备工作
- Node.js 18+ 或 Wrangler CLI
- Cloudflare 账号:免费版每天 10 万次请求,https://dash.cloudflare.com/sign-up
- Wrangler CLI:Workers 官方工具,
npm install -g wrangler - 可选:
miniflare本地模拟器,调试用
3 步快速上手
第 1 步:安装 Skill
npx skills add cloudflare/skills --skill cloudflare-durable-objects
仓库:https://github.com/cloudflare/skills
第 2 步:创建 Worker 项目
npm create cloudflare@latest my-do-app -- --template worker-durable-object
cd my-do-app
npx wrangler login
第 3 步:用 Skill 写一个计数器
对 AI 说:
用 cloudflare-durable-objects Skill,写一个 Worker + DO,
GET /counter/:id 增加并返回当前计数,数据用 SQLite 存储
AI 会输出 src/index.ts,包含 DurableObject 类、increment() 方法、env.DB 绑定等关键代码。运行 npx wrangler dev 启动,curl http://localhost:8787/counter/abc 即可看到数字递增。
常见踩坑
- WebSocket Hibernation 没用:开了 DO 但没用 Hibernation API,长连接空闲时仍按请求计费,账单爆炸。
this.ctx.acceptWebSocket(server)+webSocketMessage事件是正确姿势。 - SQLite 写并发阻塞:DO 的 SQLite 是单写多读,大量并发写会卡住。务必用
blockConcurrencyWhile包装写操作,或者合并写入。 - 跨区域 ID 路由:DO 默认按 ID 哈希路由到固定区域,如果你用了
locationHint但 ID 没带地理前缀,会出现”用户 A 写入、用户 B 读不到”的情况。 - 本地开发与生产不一致:
wrangler dev用的 SQLite 是内存版的,某些边界行为(并发、断电恢复)和生产不一致,关键路径要在wrangler dev --remote上跑。 - Eviction(驱逐)与持久化矛盾:DO 闲置一段时间会被 evict,内存里的数据丢失,务必所有状态都写到 SQLite 而不是放在 this.xxx 字段。
- 限流配置:Workers 免费版每分钟 1000 次请求,超过会拒绝。生产环境需要设置合理的 limits,在 wrangler.toml 调
limits.cpu_ms。
初级用法
- 实时计数器:每个 ID 一个 DO 实例,GET 增加,GET 读取,适合做”页面浏览量”、“点赞数”。
- WebSocket 聊天室:一个房间 ID 一个 DO,所有连接订阅同一个实例,消息广播靠
this.getWebSockets().forEach(ws => ws.send(...))。 - 分布式限流:用 DO 做 token bucket,API 网关层面调用 DO 决定是否放行,比 Redis 限流延迟更低。
高级玩法
- 实时协作:用 DO + CRDT(Y.js / Automerge)做多人协同编辑,类似 Figma 多人光标,适合做在线文档。
- 跨区域数据同步:在 DO 里订阅其他 DO 的 SQLite 变更(支持 change streams),实现”全球数据最终一致”。
- AI Agent 状态机:用 DO 跑长时任务(几分钟到几小时),把中间状态存 SQLite,前端轮询查询进度。
小技巧
- 给 DO 取 ID 时加上业务前缀(如
chat:room-123),方便按前缀做批量清理和监控。 - Hibernation 模式下,WebSocket 重新唤醒会重新触发
webSocketMessage,记得加幂等。 - 写 DO 时强制”先写日志再改状态”,便于事后追溯。
- 监控 DO 用
wrangler tail实时看日志,比 Cloudflare Dashboard 的延迟低。 - 本地开发用
wrangler dev --test-scheduled,可以在本地模拟 cron 触发。
常见问题 FAQ
Q1: 这个 Skill 跟 cloudflare-durable-objects 有什么关系?必须装吗?
A: Skill 是给 AI Agent 用的”技能包”,能告诉 Agent 怎么按特定规范工作。不是必须装——如果你的项目规模小、要求不高,不装也能用。但装上能让 Agent 输出的质量更高、更符合最佳实践,推荐装。
Q2: 这个 Skill 适合哪些 AI Agent?Cursor?Claude Code?其他?
A: cloudflare-durable-objects 来自 community,主要面向支持 Skill 机制的 Agent。常见兼容 Agent 包括 Claude Code、Cursor、OpenCode、Windsurf 等。具体兼容性请查 Skill 官方文档。
Q3: 装了这个 Skill 后,会拖慢 Agent 响应吗?
A: 会的——Skill 通常会增加 prompt 长度,导致响应变慢、token 消耗增加。但质量提升明显。建议:1) 只装项目必需的 Skill;2) 用 Skill 启动/加载/卸载机制按需加载;3) 定期清理不用的 Skill。
Q4: 怎么验证 Skill 装对了?
A: 在 Agent 中输入”列出已加载的 Skill”或类似命令。如果 Skill 出现在列表里,说明装对了。然后用 Skill 跑一个相关任务,看输出是否符合 Skill 规范。
Q5: 这个 Skill 有许可证吗?能商用吗?
A: 取决于 cloudflare-durable-objects 的许可证。常见许可证包括 MIT(完全自由)、Apache-2.0(自由但有专利条款)、源可用(可看不能用)、GPL(强开源)。商用前请查仓库 LICENSE 文件。
进阶学习建议
如果想进一步用好 cloudflare-durable-objects,建议按以下路径学习:
第 1 周:熟练使用
- 完成 3 步快速上手,跑通第一个任务
- 试 2-3 个不同场景的真实任务
- 记录”哪些 prompt 有效、哪些没用”——形成自己的 prompt 笔记
第 2 周:理解机制
- 阅读 Skill 的官方文档(README、SKILL.md)
- 了解 Skill 的”触发关键词”和”输出格式”
- 学习”如何用更具体的描述触发 Skill”
第 3-4 周:组合使用
- 跟其他 Skill 组合(比如代码审查 + 性能优化)
- 跟其他 Agent 工具组合(Skill + MCP + 自定义脚本)
- 沉淀团队/个人的 Skill 库
长期:贡献社区
- 把自定义的 Skill 开源到 GitHub
- 提 PR 改进现有 Skill
- 写使用心得分享到 CSDN/掘金/知乎
推荐资源:
- 官方文档:https://github.com/cloudflare/skills
- 官方仓库 README 里的 Examples
- 社区最佳实践:Anthropic 官方博客 https://www.anthropic.com/blog
- 国内社区:CSDN AI 板块、掘金 AI 板块
避免的坑:
- 不要装太多 Skill(超过 10 个会拖慢 Agent)
- 不要把 Skill 装在不兼容的 Agent 上
- 不要直接复制 Skill 默认 prompt——要根据项目调整
- 定期 review Skill 库的实用性,清理不用的
参考链接
- Skill 仓库:https://github.com/cloudflare/skills
- Cloudflare Workers 文档:https://developers.cloudflare.com/workers/
- Durable Objects 官方文档:https://developers.cloudflare.com/durable-objects/
- Hibernation API 指南:https://developers.cloudflare.com/durable-objects/api/hibernatable-websockets/
- Wrangler CLI:https://developers.cloudflare.com/workers/wrangler/
我的个人推荐(测试编辑 Mnet)
最常用的 1 个核心用法:每天打开 Agent 第一时间加载这个 Skill,既不消耗太多 token 也能规范输出。
最容易踩的坑:别把 Skill 提示词当”开箱即用”的最终答案——它只是给你一个”标准框架”,具体项目还得你自己调整。
适合人群:做过 3+ 个实际项目的开发者,而不是”看一遍文档就完事”的小白。
3 个月使用心得:刚开始用时觉得”规范是约束”,用了 3 个月后才发现”规范是省时间”——避免每次重新决策同样的细节。
推荐配合的工具:Claude Code / Cursor / OpenCode 任选一个主流 Agent 即可,不要在工具选择上纠结太久。
长期价值:这类 Skill 的核心价值不是”立竿见影的输出”,而是”持续一致的质量”——长期用下来,你的项目质量会稳定在专业水平。
本文基于官方文档和公开资料整理,AI辅助生成,MagicNetWorld 尚未完成独立实测。如有错误或过时信息,请通过 contact@magicnetworld.com 反馈。
cloudflare-durable-objects Skill 多维度简评
类别:后端开发 来源:cloudflare/skills 定位:Cloudflare Durable Objects 开发 Skill——帮助 AI Agent 构建状态化的边缘计算应用。
说明:本文基于官方文档和公开资料整理,未经过 MagicNetWorld 实测。
一、核心定位与价值
Cloudflare Durable Objects(DO)是 Cloudflare 提供的状态化边缘计算服务,是 Cloudflare Workers 的”有状态”扩展。每个 Durable Object 拥有全局唯一名称、持久化存储以及强一致性保证。它位于传统”集中式单源服务器”和现代”分布式无状态函数”之间的中间地带——既有分布式 API 的全球可达性,又有个体实例的强一致性和状态保持。
cloudflare/skills 是 Cloudflare 官方发布的 Agent Skill 仓库,其中的 durable-objects Skill 为 AI 编码 Agent 提供了 Durable Objects 开发的完整指导,涵盖 RPC 方法实现、SQLite 存储、Alarms API、WebSocket Hibernation、Wrangler 配置和 Vitest 测试。
核心价值:让 AI Agent 掌握 Durable Objects 的开发范式——在边缘实现强一致性的状态管理,适用于实时协作、游戏、聊天室等场景。
二、Durable Objects 核心概念
Durable Objects 与普通 Workers 的关键区别:
| 特性 | Workers | Durable Objects |
|---|---|---|
| 状态 | 无状态(需外部存储) | 有状态(内建持久化 + 内存) |
| 一致性 | 最终一致性 | 强一致性 |
| 实例 | 全球分布式,无法寻址 | 全局唯一名称,可精确寻址 |
| 存储 | KV、R2、D1(外部) | SQLite 内嵌存储 |
| 伸缩 | 自动水平伸缩 | 单实例串行处理请求 |
三、核心能力
| 能力 | 说明 |
|---|---|
| 状态化 Worker | 每个 DO 实例拥有全局唯一标识和持久化状态 |
| WebSocket Hibernation | WebSocket 连接休眠机制,降低空闲连接成本 |
| SQLite 存储 | 内嵌 SQLite,通过 sql.exec 直接执行 SQL |
| Alarm API | 定时触发机制,支持 TTL、定时任务和周期性操作 |
| RPC 方法 | 通过 idFromName / getByName 进行跨 DO 的 RPC 调用 |
| Vitest 测试 | 通过 @cloudflare/vitest-pool-workers 编写单元和集成测试 |
四、安装与使用
# 通过 npx 安装
npx skills add https://github.com/cloudflare/skills --skill durable-objects
# 或手动克隆
git clone https://github.com/cloudflare/skills
创建 DO 项目
npm create cloudflare@latest -- durable-object-starter
# 选择 "Hello World example" → "Worker + Durable Objects"
Skill 内置参考文档
该 Skill 包含三个内置参考文件:
references/rules.md— 核心规则、存储、并发、RPC、Alarmsreferences/testing.md— Vitest 设置、单元/集成测试、Alarm 测试references/workers.md— Workers 处理器、类型、Wrangler 配置
五、使用场景
- 实时协作工具:多用户同时编辑文档、白板、表格
- 聊天室/消息系统:通过 WebSocket + DO 实现房间状态管理
- 多人游戏:游戏房间的状态同步和逻辑执行
- 预订系统:座位/资源预订的并发控制和状态管理
- 分布式计数器/限流器:全局唯一的计数和速率限制
六、Cloudflare DO 最佳实践
根据官方文档,Durable Objects 开发中应遵循:
- 使用
blockConcurrencyWhile确保关键操作的串行执行 - 合理使用
idFromName和getByName管理 DO 实例 - 利用
setAlarm实现定时清理、TTL 和周期性任务 - SQLite 存储已从 Beta 进入 GA,新 DO 类应使用 SQLite 存储
- Free 计划也支持 SQLite 存储(有配额限制)
七、注意事项
- DO 实例按请求计费,空闲实例也会产生存储费用
- 每个 DO 实例串行处理请求,需要注意避免单个实例成为瓶颈
- WebSocket Hibernation 是降低 WebSocket 成本的关键机制
- 该 Skill 提供的是开发指导,具体代码实现需要结合 Cloudflare Workers 运行时
参考资料
- cloudflare/skills 官方仓库 — GitHub
- Cloudflare Durable Objects 官方文档 — Cloudflare 开发者文档
- Durable Objects API 参考 — Cloudflare
- Durable Objects 最佳实践 — Cloudflare
- Durable Objects 示例代码 — Cloudflare
- On Durable Objects - Kevin Wang — 实战经验分享
快速安装
npx skills add cloudflare/skills --skill cloudflare-durable-objects