ネットワーク/リアルタイム/Lesson 08
リアルタイム通信 — WebSocket · SSE · Long Polling
30分·theory
リアルタイム通信 — WebSocket · SSE · Long Polling
🎯 このlessonを読み終えたら
このlessonを読み終えると、以下の3つを自信を持って説明できるようになります。
- ▸✅ WebSocket vs SSE vs Long Polling の違い
- ▸✅ socket.io のフォールバックメカニズム
- ▸✅ WebRTC の P2P 接続 + STUN/TURN
学習目標をチェックリストとして手元に置き、すべて答えられるようになったらlessonを閉じてください。
リアルタイム通信4方式の比較
リアルタイム = サーバー → クライアントへのプッシュ(または双方向)。
選択ガイド:
- ▸🟢 単方向通知 → SSE(シンプル・自動再接続)
- ▸🟢 双方向チャット・ゲーム → WebSocket
- ▸🟢 P2P 映像 → WebRTC
- ▸🟢 ポーリング + 互換性 → Long Polling(レガシーブラウザ)
- ▸🔴 単純なポーリング → できるだけ避ける
WebSocket の動作 + 使用パターン
WebSocket = 1本の TCP 接続で双方向メッセージ:
ハンドシェイク(HTTP → WS アップグレード):
クライアント(ブラウザ):
サーバー(Node.js + ws):
実務ライブラリ:
- ▸Socket.IO — フォールバック(XHR · Long polling)、ルーム・ネームスペース
- ▸Pusher · Ably · Supabase Realtime — マネージドサービス
- ▸Centrifugo · Mercure — セルフホスティング
スケーリングパターン:
- ▸Redis Pub/Sub — 複数サーバー間のメッセージルーティング
- ▸スティッキーセッション — 同一ユーザーは同一サーバーへ(または Redis で状態共有)
- ▸ハートビート(ping/pong) — 切断した接続の検出(通常30秒間隔)
SSE + Long Polling
SSE(Server-Sent Events) — サーバー → クライアントの単方向ストリーム:
クライアント(ブラウザ):
サーバー(Node.js):
SSE のメリット:
- ▸HTTP 標準(ファイアウォール・プロキシフレンドリー)
- ▸自動再接続
- ▸WebSocket より シンプル
- ▸Last-Event-ID ヘッダーで切断箇所から再開
SSE のデメリット:
- ▸単方向のみ(クライアント → サーバーは別途 POST が必要)
- ▸IE 非対応(現在は無視可)
- ▸HTTP/1.1 の同時接続数制限(HTTP/2 以上を推奨)
Long Polling — レスポンスをできる限り遅らせる:
用途:
- ▸レガシーブラウザ(IE9-)
- ▸WebSocket · SSE がブロックされた環境
- ▸単純な通知(1秒以内の遅延が許容される場合)
多くの場合 → WebSocket · SSE の方が効率的
🤖 AIへのリクエスト例
このlessonの概念を理解すれば、AIに具体的に指示できるようになります。漠然とした「直して」ではなく、語彙を持ったリクエスト — それがトークン節約の出発点です。
- ▸「このpollingコードをWebSocket(socket.io)に移行して」
- ▸「このSSEをWebSocket vs SSEで比較し、適切な方に整理して」
なぜこれがトークンを減らすのか
概念を知らないままAIの回答を受け取っても、「それは何ですか?」とまた聞き直す必要があります。その「聞き直し」がトークンを消費します。概念を一度理解しておけば、会話が一度で終わります。
先に読むとよい概念: CORS + セキュリティ — 同一オリジン・CORS・プリフライト
次のおすすめ: インフラ — CDN・ロードバランサー・プロキシ・レンダリング