[ PROMPT_NODE_24088 ]
Durable Objects API 参考
[ SKILL_DOCUMENTATION ]
# Durable Objects API
## 类结构
typescript
import { DurableObject } from "cloudflare:workers";
export class MyDO extends DurableObject {
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);
// 在每次唤醒时运行 - 保持轻量!
}
// RPC 方法(直接从 worker 调用)
async myMethod(arg: string): Promise { return arg; }
// fetch 处理程序(旧版/HTTP 语义)
async fetch(req: Request): Promise { /* ... */ }
// 生命周期处理程序
async alarm() { /* 闹钟触发 */ }
async webSocketMessage(ws: WebSocket, msg: string | ArrayBuffer) { /* ... */ }
async webSocketClose(ws: WebSocket, code: number, reason: string, wasClean: boolean) { /* ... */ }
async webSocketError(ws: WebSocket, error: unknown) { /* ... */ }
}
## DurableObjectState 上下文方法
### 并发控制
typescript
// 在发送响应后完成工作(例如:清理、日志记录)
this.ctx.waitUntil(promise: Promise): void
// 临界区 - 在完成前阻塞所有其他请求
await this.ctx.blockConcurrencyWhile(async () => {
// 在此块期间不处理其他请求
// 用于初始化或关键操作
})
**何时使用:**
- `waitUntil()`:后台清理、日志记录、响应后的非关键工作
- `blockConcurrencyWhile()`:首次初始化、模式迁移、关键状态设置
### 生命周期
typescript
this.ctx.id // 此实例的 DurableObjectId
this.ctx.abort() // 强制驱逐(在 PITR 恢复后使用以重新加载状态)
### 存储访问
typescript
this.ctx.storage.sql // SQLite API(推荐)
this.ctx.storage.kv // 同步 KV API(仅限 SQLite DOs)
this.ctx.storage // 异步 KV API(旧版/仅 KV DOs)
参见 **[DO 存储](../do-storage/README.md)** 以获取完整的存储 API 参考。
### WebSocket 管理
typescript
this.ctx.acceptWebSocket(ws: WebSocket, tags?: string[]) // 启用休眠
this.ctx.getWebSockets(tag?: string): WebSocket[] // 按标签获取或获取全部
this.ctx.getTags(ws: WebSocket): string[] // 获取连接的标签
### 闹钟 (Alarms)
typescript
await this.ctx.storage.setAlarm(timestamp: number | Date) // 调度(覆盖现有)
await this.ctx.storage.getAlarm(): number | null // 获取下一次闹钟时间
await this.ctx.storage.deleteAlarm(): void // 取消闹钟
**限制:** 每个 DO 1 个闹钟。使用队列模式 f