先看看示例
作者提供的示例,实际效果取决于你的输入和使用工具。
输入
每个 roomId 维护一个计数器;同房间用户看到相同计数;不同房间隔离;外层 Worker 已做房间访问检查。
输出
编辑示例 · 未运行
// Worker 中在完成身份与房间权限验证后获取同房间对象
const stub = env.COUNTERS.getByName(roomId);
const value = await stub.increment();接口约定:increment() 在对象内读取并持久化新计数,再返回结果。
验证用例:同一房间并发 10 次增加应只增加 10;另一房间不变;对象重启后值保留。
若客户端会自动重试,还需 requestId 去重,避免重复加数。
方法说明
实现或审查 RPC、SQLite、闹钟与 WebSocket 等有状态 Worker 功能。 具体任务 为房间计数器定义对象边界:实现或审查 RPC、SQLite、闹钟与 WebSocket 等有状态 Worker 功能。 设计长连接协作状态:按房间组织对象、存储和客户端广播,检查休眠、断线重连与权限。 必需材料 Worker 代码与绑定配置 状态分组键和并发一致性需求 可选材料 存储与恢复要求 重复请求样例 使用门槛 已确定对象边界,了解身份验证必须发生在可信服务路径。 这个 Skill 额外提供的方法 按实体集中状态与协调,检查并发、重试与重启后的行为,而不只验证一次调用。 编辑示例(未运行) 为房间计数器定义对象边界 任务:请根据下面的示例材料完成为房间计数器定义对象边界,把判断依据和待确认事项写清楚。 输入: 每个 roomId 维护一个计数器;同房间用户看到相同计数;不同房间隔离;外层 Worker 已做房间访问检查。 结果片段: ```typescript // Worker 中在完成身份与房间权限验证后获取同房间对象 const stub = env.COUNTERS.getByName(roomId); const value = await stub.increment(); ``` 接口约定:increment() 在对象内读取并持久化新计数,再返回结果。 验证用例:同一房间并发 10 次增加应只增加 10;另一房间不变;对象重启后值保留。 若客户端会自动重试,还需 requestId 去重,避免重复加数。 按实体集中状态与协调,检查并发、重试与重启后的行为,而不只验证一次调用。 该片段是编辑示例,用于说明交付形态,未运行上游技能。 首次任务 请使用「把持久状态和并发协调放进 Durable Objects」完成「为房间计数器定义对象边界」。 任务要求:按实体集中状态与协调,检查并发、重试与重启后的行为,而不只验证一次调用。 我的必需材料: - Worker 代码与绑定配置:[请填写或粘贴] - 状态分组键和并发一致性需求:[请填写或粘贴] 请基于上述实际材料输出:预期获得对象接口、存储和调用实现,以及针对并发、重复请求和重启后行为的验证安排。验收要看状态归属是否正确,多个客户端是否可能产生冲突,不能只用一次成功调用证明协调逻辑可靠。缺少依据的地方单列为待确认,不编造事实;未执行的操作或测试明确标为未执行。 验收要求: 1. 状态键与实际业务隔离边界一致。 2. 并发与重试不会丢失或重复更新。 3. 重启后状态和迁移行为经过测试。 验收方法 状态键与实际业务隔离边界一致 并发与重试不会丢失或重复更新 重启后状态和迁移行为经过测试 依赖与准备 需要 Cloudflare Workers、Durable Objects 绑定与兼容 Wrangler 环境;具体 API 按当前官方文档核对,部署需账号、资源权限和费用范围。 使用边界 对象 ID 或房间名不构成授权,必须核验调用者访问权。 生产部署、迁移和数据删除需单独授权,持久化方案应有恢复验证。 排错 不同用户看到混乱状态:检查对象命名是否稳定且包含正确租户或房间边界。 请求重试导致重复扣减或计数:引入幂等键与持久记录,测试重复请求路径。 固定来源 https://github.com/cloudflare/skills/blob/6dc7604903127485e7e4cb26314651ebd4a4df19/skills/durable-objects/SKILL.md