持久化对象
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @kunlungrowth/kg-durable-objects
技能介绍
解决的问题
在 Cloudflare Workers 上构建实时协作或状态化应用时,开发者常面临强一致性、实体协调和状态持久化的挑战。例如,聊天室需要消息顺序一致,库存系统需要原子扣减,多人游戏需要状态同步。传统无状态 Workers 难以处理这些场景,而分散的存储方案可能导致数据不一致或协调困难。
技能如何工作
核心能力包括将协调原子(如单个聊天室、用户或游戏)建模为独立 DO 实例,通过 getByName() 确定性路由确保同一输入指向同一实例,使用 SQLite 存储实现数据持久化,利用 RPC 方法替代 fetch handler 提升兼容性,并通过 setAlarm() 实现每实体定时任务。关键步骤包括:
- 确认是否需要 DO,避免无状态 CRUD 场景误用
- 定义协调原子,避免全局单例
- 编写 wrangler 配置声明绑定与迁移
- 实现 DO 类,在构造函数中用
blockConcurrencyWhile()初始化表结构 - 同步写入
storage.sql.exec,先持久化再更新内存状态 - 使用
@cloudflare/vitest-pool-workers进行 RPC 方法单测 - 对照关键规则和反模式清单审查代码
适用边界与注意点
DO 适用于需要强一致性、实体协调或持久连接的场景,如聊天室、库存系统、WebSocket 长连接。但不适用于无状态请求处理(应使用普通 Workers)、全球分布式无协调读(使用 KV/缓存)或高扇出独立请求。需避免单一全局 DO、每次请求调用 blockConcurrencyWhile()、关键状态仅存内存等反模式,确保数据持久化和原子操作。
使用场景
- 在Cloudflare Workers上开发实时聊天室时需确保消息顺序一致,用DO实现每房间独立协调与SQLite存储
- 构建多租户SaaS应用时需为每个用户隔离数据,通过DO绑定独立存储实例实现多租户数据隔离
- 开发多人协作游戏时需处理回合制状态同步,用DO的强一致性保证游戏状态不冲突
- 设计库存系统时需原子扣减库存并设置每实体定时任务,用DO+setAlarm实现库存自动续期
适合人员
- 边缘计算工程师需在Workers上实现实时状态应用并处理强一致性需求
- 后端架构师关注多租户数据隔离和库存原子操作
- 实时系统开发者构建聊天室/游戏时需解决实体协调问题
- 云原生团队需理解DO适用场景与反模式避免设计错误