こんにちは、ソフトウェアエンジニアの沖(@takuoki)です。 私たちのチームでは、バックエンドを TypeScript で開発しており、Web フレームワークには Hono、メッセージキューには NATS を使っています。その中で、Server-Sent Events(SSE)を使ったリアルタイム通知の仕組みを実装する機会がありました。 SSE のような長寿命の接続では、クライアントの切断・タイムアウト・サーバー側のエラーなど、さまざまな理由で接続が終了します。このとき、NATS サブスクリプションやタイマーを確実にクリーンアップしないと、リソースリークが発生します。実際、最初にプロトタイプを作った際にはリソースリークを発生させてしまい、長時間継続して稼働すると API サーバーが落ちてしまいました。そのため、本番向けに作り直す際に、リークを確実に防ぐ仕組みが必要でした。 リソースリー

