Cloudflare Agents 从入门到精通
附录

§11 Durable Objects 与边缘运行时:在离用户最近的地方算

Durable Objects、调度、子 Agent、长任务。这一 Part 是 Cloudflare 的护城河。

11.1 Agent 的本质

Agent 继承自 Durable Object。它就是一个有状态、单实例、全球可寻址的对象。

每个 name 对应一个实例。Counter:user-123Counter:user-456 是两个独立对象,各有各的 SQLite。

11.2 生命周期方法

class MyAgent extends Agent {
  async onStart() { /* DO 启动,fetch/RPC 之前 */ }
  async onRequest(request: Request) { return new Response("hi"); }
  async onConnect(conn, ctx) { conn.send("connected"); }
  async onMessage(conn, msg) { /* WebSocket 消息 */ }
  async onStateChanged(state, source) { /* 状态变了 */ }
  onError(e) { console.error(e); }
  async cleanup() { await this.destroy(); }
}

11.3 休眠与唤醒

没客户端连、没定时任务时,Agent 休眠,不占资源不花钱。下次请求唤醒,状态从 SQLite 读回。

标叔的经验
我做一个"每日星座"Agent,平时零成本躺着。只有用户打开或 cron 触发才醒。账单好看。

11.4 边缘的含义

你的 Agent 跑在离用户最近的 Cloudflare 节点。状态也在那。计算和状态同置,延迟极低。

维度 传统服务器 Cloudflare DO 标叔的结论
位置 单区域 全球边缘 用户就近
扩缩 手动 自动到百万实例 省心
成本(空闲) 照收 真零

运行时讲完。下一章让 Agent 会"自己定时干活"。