适合场景
WebSocket 房间、锁、计数器、协同编辑、游戏房间
Wrangler 配置
{
"durable_objects": {
"bindings": [{ "name": "ROOM", "class_name": "Room" }]
},
"migrations": [{ "tag": "v1", "new_classes": ["Room"] }]
} Worker 代码
export class Room {
constructor(state, env) { this.state = state; }
async fetch(req) {
const count = (await this.state.storage.get("count")) ?? 0;
await this.state.storage.put("count", count + 1);
return Response.json({ count: count + 1 });
}
}
export default {
async fetch(req, env) {
const id = env.ROOM.idFromName("room-42");
return env.ROOM.get(id).fetch(req);
},
}; 实现注意事项
- ● 单线程串行执行;不要在一个 DO 里跑慢任务阻塞整个房间
- ● WebSocket 长连接用 acceptWebSocket + hibernation API,否则一直计费
- ● idFromName 是确定性映射;不同名字对应不同实例,不要乱命名
已复制