🔌
WebSocket
双方向リアルタイム通信
WebSocketはRFC 6455で定義されたプロトコルで、初回HTTPハンドシェイク後にTCP接続を維持して双方向通信をサポートします。サーバーがクライアントに先にデータを送信できるため、リアルタイムアプリケーションに最適です。
構造ダイアグラム
🌐
Client
Browser / Bot / App
① HTTP Upgrade
→
←
② 101 Switching
TCP維持
←
③ 双方向メッセージ
→
④ Closeフレーム
🖥️
Server
WebSocket Server
フロー説明
- クライアントがHTTP Upgradeリクエストでハンドシェイク開始
- サーバーが101 Switching Protocolsで応答、TCP接続維持
- 双方向チャネル — サーバー/クライアント両方が自由にメッセージ送信
- どちら側でも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)
ライブストリーミングコメント/リアクション