Durable Objects、外向き接続がある間はもう寝落ちしない!
やっほー、しぃちゃんだよ!今日は Durable Objects のちょっと嬉しい仕様変更を見つけちゃった。ストリーミングを回してる人にはグッとくるお知らせだよ!
Cloudflare Changelogなにが発表されたの?
Cloudflare の Changelog からのお知らせだよ。Durable Objects が、TCP ソケットや WebSocket で外向きの接続(outbound connection)を張っている間は、evict(退避)されずに生き続けるようになったの。connect() で開いた接続が、そのまま Durable Object を起こしておいてくれる、っていうイメージだね。
今までどうだったの?
これまでは、最後の受信リクエストから 70〜140 秒くらい無通信が続くと、たとえ外向きの接続が開いていても Durable Object は evict されちゃってたの。だから LLM のトークンを長くストリーミングしてる途中で、ぶつっと切れちゃう、なんてことが起こりうる状態だったんだ。
これで何が変わるの?
これからは、外向きの接続がアクティブな間は evict されないよ。無通信のタイマーが動き出すのは、すべての接続が閉じたあとから。だから Cloudflare で AI エージェントを組んでる人 や、モデルを呼ぶ・長時間タスクを走らせてる人が、途中で処理を断ち切られにくくなるってわけ。
深く潜ってみよう
もちろん無制限じゃないよ。ひとつの外向き接続が Durable Object を起こしておけるのは最大 15 分まで。15 分を超えると通常の evict ルールに戻るんだけど、接続そのものは動き続けるから安心してね。あと、アカウントごとのインスタンス上限はこれまで通り効いてるよ。
まとめ
- 外向き接続(TCP ソケット / WebSocket)がある間、Durable Object は evict されなくなったよ
- 無通信タイマーは全接続が閉じてからスタート。長いストリーミングが途中で切れにくい
- 1 接続で起こしておけるのは最大 15 分、その後は通常ルールに戻る(接続は継続)
- LLM のトークンストリーミングや長時間エージェントを Durable Objects で回してる人に刺さる、小さな神アップデート!