Skip to content
open-computeopen-computeopen-compute

Durable Objects

Durable Object 将计算与强一致存储绑定在同一对象上。在 open-compute 上,所有对象运行在本机的单个 workerd 进程中。

例如:

  • 在多个客户端之间协调状态
  • 每个对象独立的强一致存储
  • Alarms 与 WebSocket hibernation
export class Counter {
constructor(
private readonly ctx: DurableObjectState,
private readonly env: Env,
) {}
async fetch(request: Request): Promise<Response> {
const n = ((await this.ctx.storage.get<number>("n")) ?? 0) + 1;
await this.ctx.storage.put("n", n);
return Response.json({ n });
}
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const id = env.COUNTER.idFromName("global");
return env.COUNTER.get(id).fetch(request);
},
} satisfies ExportedHandler<{ COUNTER: DurableObjectNamespace }>;

wrangler.jsonc 中使用 Wrangler 标准 Durable Object 字段绑定:

{
"name": "do-app",
"main": "src/index.ts",
"durable_objects": {
"bindings": [{ "name": "COUNTER", "class_name": "Counter" }]
}
}

class 随 Worker 上传;Durable Object migration 使用 Wrangler 标准 migrations 字段。语法见绑定

主题 Cloudflare open-compute
Worker / class API Durable Objects API 相同:namespace idFromName / newUniqueId / idFromString / get / getByName、stub fetch / RPC、state.storage 的 KV 与 SQL、transaction、output gate
对象位置 按地区调度,locationHint / jurisdiction / migration 全部位于本机单个 workerd;locationHint / jurisdiction / migration 不产生地理效果
Alarms 提供 提供:getAlarm / setAlarm / deleteAlarmalarm()
Hibernation 提供 提供
绑定 Wrangler durable_objects 标准 nameclass_name,必须指定 class_name
Fetcher.connect() 通用出站 使用绑定声明的连接,而非第二条通用出站通道

下一步:Alarms · 使用 bindings 开发 · 兼容性与限制