Durable Objects、调度、子 Agent、长任务。这一 Part 是 Cloudflare 的护城河。
11.1 Agent 的本质
Agent 继承自 Durable Object。它就是一个有状态、单实例、全球可寻址的对象。
每个 name 对应一个实例。Counter:user-123 和 Counter: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 会"自己定时干活"。