Cloudflare WorkersでWebSocketを常駐させない。Durable Objects Hibernation入門
DRANK

Cloudflare WorkersでWebSocketを実装し、接続も通知も動いた。ここで完成だと思っていました。しかし私の用途では、接続時間のほとんどがアイドルです。更新があったときだけ「再取得して」と通知したいのに、そのためにDurable Objectを起こし続けるのはもったいない構成でした。そこでDurable ObjectsのHibernation WebSocket APIへ移行しました。ただし、accept()をacceptWebSocket()へ置き換えるだけでは完成しません。休止するとclass fieldは消え、constructorはもう一度実行されます。接続直後や再接続中の更新も取りこぼします。この記事では、Honoの認証routeからDurable Object、clientの再同期、workerdでのtest、運用確認までを1本につなげます。Hibernationを前提に設計するHibernationではWebSocket接続は残りますが、Durable Objectのmemoryは残りません。この違いから構成を決めます。今回つくるものデータ本体をWebSocketで同期するのではなく、更新があったことだけを通知します。1. client A / Bが同じユーザー用Durable Objectへ接続 2. Hono APIがDBを更新 3. Hono APIがDurable Objectへinvalidateをpublish 4. Durable Objectが接続中のclientへbroa…

zenn.dev
Related Topics: WebSocket