🔴 WebSocket vs SSE vs ロングポーリング
📖 定義
リアルタイム通信は、サーバーとクライアント間で即座にデータ交換を可能にする技術です。WebSocketは双方向リアルタイム通信を提供し、SSE(Server-Sent Events)はサーバーからクライアントへのみデータをプッシュし、ロングポーリング(Long Polling)はHTTPを利用したリアルタイム通信方式です。それぞれに長所と短所があり、使用シナリオに応じて選択する必要があります。
🎯 例えで理解する
電話 vs ラジオ vs メッセンジャー
通常のHTTP = 郵便
あなた: "こんにちは?" (手紙を送る)
↓ (数日後)
友達: "やあ!" (返事)
↓ (数日後)
あなた: "元気?" (また手紙)
- 遅い
- 毎回新しく接続
- リアルタイム不可能
ロングポーリング = 電話(通話待機)
あなた: "何かあったら教えて!" (電話して待機)
↓ (しばらく待つ...)
友達: "今話すことがある!" (応答)
↓ (通話終了)
あなた: "また何かあったら教えて!" (再度電話)
- HTTPベース
- 接続維持 → 応答 → 再接続
- 非効率的
SSE = ラジオ放送
友達: "皆さんこんにちは!" (放送開始)
"今日の天気は..." (継続送信)
"次のニュースは..." (継続送信)
あなた: (聞くだけ)
- サーバー → クライアント(単方向)
- 接続維持
- シンプル
WebSocket = ビデオ通話
あなた: "こんにちは!" (即座に送信)
友達: "会えて嬉しい!" (即座に応答)
あなた: "何してる?" (即座に送信)
友達: "コーディング中!" (即座に応答)
- 双方向リアルタイム
- 接続維持
- 速くて効率的
レストランの注文
通常のHTTP = セルフサービス
1. カウンターに行って料理を注文
2. 待つ
3. 料理を受け取って席へ
4. カウンターに再び行って飲み物を注文
5. また待つ
ロングポーリング = ベルを押して待機
1. ベルを押してスタッフを待つ(接続維持)
2. スタッフが来る → "ご注文をどうぞ"
3. 注文してベルを再び押す
4. また待つ...
SSE = キッチンディスプレイ
キッチン: "1番のお客様、料理ができました!"
キッチン: "2番のお客様、準備中です!"
キッチン: "3番のお客様、もうすぐです!"
あなた: (聞くだけ)
WebSocket = テーブルサービス
あなた: "お水ください"
スタッフ: "はい、お持ちします"
あなた: "キムチも"
スタッフ: "すぐお持ちします"
スタッフ: "料理をお持ちしました"
あなた: "ありがとうございます"
- 自由な会話
- 素早い応答