🔌

WebSocket

双方向リアルタイム通信

WebSocketはRFC 6455で定義されたプロトコルで、初回HTTPハンドシェイク後にTCP接続を維持して双方向通信をサポートします。サーバーがクライアントに先にデータを送信できるため、リアルタイムアプリケーションに最適です。

構造ダイアグラム

🌐
Client
Browser / Bot / App
① HTTP Upgrade
② 101 Switching
TCP維持
③ 双方向メッセージ
④ Closeフレーム
🖥️
Server
WebSocket Server
フロー説明
  1. クライアントがHTTP Upgradeリクエストでハンドシェイク開始
  2. サーバーが101 Switching Protocolsで応答、TCP接続維持
  3. 双方向チャネル — サーバー/クライアント両方が自由にメッセージ送信
  4. どちら側でもCloseフレームで接続終了
活用例: Slack Socket Mode, Discord Gateway, リアルタイムチャット、ゲーム

動作フロー

1

クライアントがHTTP UpgradeリクエストでWebSocketハンドシェイクを開始

2

サーバーが101 Switching Protocolsで応答、TCP接続を維持

3

双方向チャネル確立 — サーバー/クライアント双方が自由にメッセージ送信

4

どちらかがCloseフレームを送信して接続終了

メリット

  • 真の双方向リアルタイム通信
  • サーバーが先にデータをpush可能
  • HTTPオーバーヘッドなしの軽量フレーム
  • ファイアウォール背後でもアウトバウンド接続で動作

デメリット

  • 接続維持コスト(サーバーメモリ/コネクション)
  • 切断時の再接続ロジックが必要
  • ロードバランサー設定が複雑
  • HTTPキャッシュ不可

ユースケース

チャットアプリケーション リアルタイムダッシュボード/モニタリング オンラインゲーム コラボレーションエディタ(Google Docs) リアルタイム音声書き起こし(STT — Deepgram, Azure Speech) ライブストリーミングコメント/リアクション