SSE は Server-Sent Events(サーバー送信イベント)の略です。Web 標準技術で、サーバーが1つの長時間持続する HTTP 接続を通じてクライアントにリアルタイム更新をプッシュできるようにします。
主な特徴 Link to heading
- サーバーからのプッシュ:クライアントがリクエストしなくても、サーバーがいつでもメッセージを送信できます。
- 自動再接続:接続が切れた場合、ブラウザが自動的に再接続し、
last-event-idを使用して前回のイベントから再開できます。 - 実装の簡単さ:クライアント側とサーバー側の両方で最小限のコードで済みます。
- HTTP ベース:プロキシ、ファイアウォール、既存の Web インフラと高い互換性があります。
- イベントサポート:イベント名、データ、ID、再試行指示を送信できます。
- 軽量:単方向ストリーミングの場合、WebSocket よりオーバーヘッドが低いです。
使用例 Link to heading
- リアルタイム通知とアラート
- ライブダッシュボードと監視システム
- 株価、暗号通貨レート、スポーツスコア
- 長時間タスクの進捗追跡(ファイルアップロード、エクスポート、AI処理など)
- ニュースフィードとソーシャルメディア更新
- チャットアプリケーション(サーバーからクライアントへのメッセージ送信部分)
制限事項 Link to heading
- 単方向のみ:データはサーバーからクライアントへの一方向のみです。クライアントからサーバーへの通信には Fetch、AJAX、または WebSocket を併用する必要があります。
- テキストのみ:バイナリデータ(画像、動画など)をネイティブでサポートしていません。Base64 エンコードが必要で、データサイズが増大します。
- ブラウザの接続制限:ほとんどのブラウザは同一ドメインあたりの同時 SSE 接続数を制限しています(通常6個)。接続数が多すぎると問題が発生する可能性があります。
- 高頻度双方向通信には不向き:リアルタイムマルチプレイゲームや複雑なチャットシステムには、WebSocket が適しています。
- サーバータイムアウト:一部のサーバーやプロキシにデフォルトの接続タイムアウト設定があり、keep-alive の設定が必要になる場合があります。
- クロスオリジン問題:クロスドメインリクエストにはサーバー側で適切な CORS ヘッダーの設定が必要です。