SSE再接続を止める

更新: 2026-09-05
SSE障害対応API運用

SSEが「つながるのに負荷が増える」ときは、接続成功を正常終了と混同している可能性がある。 ストリームを開いた直後に閉じると、クライアントは一時的な障害として再接続を続ける。

切り分ける順番

1. 切断元を確認する2. 再試行の間隔を見る3. 要求に対応できるか決める4. 未対応なら明示して終える接続を開けた、では終わらせない。要求を継続できるかを判定する。継続できないなら、ストリームを作って閉じるより、405のような応答で再試行条件を消す。
「どこで切れたか」から始め、未対応かどうかを決めてから応答を変える。

3つの観測を分ける

  1. 切断元: サーバが閉じたのか、クライアントが中止したのかをログで分ける
  2. 再試行: 間隔と回数を見て、失敗を回復可能として扱っていないかを確認する
  3. 対応可否: そのHTTPメソッドと経路で、継続する応答を返す仕様があるかを確認する

この3つを混ぜると、接続、実装、クライアントの挙動を同時に直して原因が消える。先に観測を分ける。

未対応を速く終える

未対応の要求は、接続を開いてから黙って切らない。405のように扱えないことを返し、クライアントが再試行しても成功しない条件を取り除く。

拒否する経路を増やすときは、正しい接続を壊していないかを必ず別に確認する。拒否だけのテストは、利用できる経路まで消していても通ってしまう。

実際に踏んだ経緯

今回、未対応のGETがSSE接続を開いたあとすぐ閉じ、クライアントが2秒ごとに再接続していた。GETを405で明示的に拒否し、拒否経路の応答を短くした。

経緯と検証の分け方は、切れたSSEをすぐ止めたに書いた。 公開状態を確かめるときは、公開されたか確かめるを使う。

WIKI一覧へ