WebSocket - リアルタイム双方向通信プロトコル

ネットワーク技術 | IT用語集

WebSocketとは

WebSocketは、1つのTCP接続上でクライアントとサーバーの間に全二重(双方向)通信チャネルを確立するプロトコルです。2011年にRFC 6455として標準化され、W3CによってWebSocket APIも定義されています。HTTPのリクエスト-レスポンスモデルとは異なり、一度接続が確立されると、サーバーとクライアントの双方がいつでもデータを送受信できます。

WebSocketが登場する以前は、サーバーからクライアントにデータをプッシュするために、HTTPポーリング(定期的にサーバーに問い合わせ)やロングポーリング(応答を保留して変更時に返却)といった非効率な手法が使われていました。WebSocketはこれらの問題を根本的に解決し、チャットアプリ、リアルタイムダッシュボード、オンラインゲームなど、即時性が求められるアプリケーションの標準基盤となっています。

WebSocketの接続プロセス

WebSocket接続は、HTTPアップグレードハンドシェイクで開始されます。

  1. ハンドシェイク要求:クライアントがHTTP GETリクエストにUpgrade: websocketヘッダーを付与して送信
  2. ハンドシェイク応答:サーバーが101 Switching Protocolsステータスコードで応答
  3. 全二重通信開始:ハンドシェイク完了後、TCPコネクション上で双方向のデータフレーム送受信が可能に
  4. 接続終了:どちらかがCloseフレームを送信して接続を閉じる

WebSocketはHTTPのポート80(ws://)または443(wss://、TLS暗号化)を使用するため、ファイアウォールやプロキシを通過しやすい特徴があります。

WebSocketとHTTPの比較

項目HTTPWebSocket
通信方向半二重(リクエスト-レスポンス)全二重(双方向)
接続リクエストごとに接続持続的接続
オーバーヘッドリクエストごとにヘッダー送信2-14バイトのフレームヘッダー
サーバープッシュ不可(ポーリングが必要)ネイティブ対応
レイテンシ接続確立のオーバーヘッド低レイテンシ(接続維持)

リアルタイム通信技術の選択肢

  • WebSocket:双方向通信が必要な場合。チャット、ゲーム、コラボレーションツール
  • Server-Sent Events(SSE):サーバーからクライアントへの一方向プッシュ。AIストリーミング応答、ニュースフィード、株価通知。HTTP上で動作するため実装が簡単
  • HTTP/2 Server Push:サーバーからの先読み配信。ただし2025年現在、多くのブラウザで非推奨に
  • gRPCストリーミング:バックエンドサービス間の双方向ストリーミング。Protocol Buffersで高効率
  • WebTransportHTTP/3QUIC)上の次世代リアルタイム通信プロトコル。WebSocketの後継候補

主要なライブラリとフレームワーク

  • Socket.IO:WebSocketにフォールバック、再接続、ルーム機能を追加したNode.jsライブラリ
  • ws:Node.js向けの軽量WebSocket実装
  • Phoenix Channels:Elixir/Phoenixフレームワークのリアルタイム通信機構
  • Django Channels:PythonのDjangoフレームワークにWebSocket対応を追加
  • Gorilla WebSocket:Go言語向けのWebSocketライブラリ

2025-2026年の最新動向

WebTransportの実用化が進んでいます。HTTP/3/QUIC上で動作するWebTransportは、WebSocketの後継として設計されており、Head-of-Lineブロッキングの回避、順序保証なしのデータグラム送信、複数ストリームの並列利用が可能です。Chrome、Edge、Firefoxが対応しており、ゲームや低遅延ビデオ配信での採用が始まっています。

AIストリーミング応答では、ChatGPTやClaude等のLLMがSSE(Server-Sent Events)を採用してトークン単位のストリーミング出力を実現しています。WebSocketよりも実装が簡潔で、HTTP互換性も高いため、AI APIではSSEが主流となっています。

また、Cloudflare Durable ObjectsSupabase Realtimeなど、エッジコンピューティング上のWebSocketマネージドサービスが普及し、大規模リアルタイムアプリケーションの構築が容易になっています。

関連技術と用語

  • API - WebSocketもAPIの一形態
  • HTTP/2 - サーバープッシュ機能を持つWebプロトコル
  • HTTP/3 - WebTransportの基盤
  • QUIC - WebTransportのトランスポート層
  • GraphQL - Subscriptionで WebSocket を使用

外部リンク

よくある質問(FAQ)

Q. WebSocketとは何ですか?

WebSocketは1つのTCP接続上で全二重通信を実現するプロトコルです。HTTPと異なり、接続を維持したままサーバー・クライアント双方がデータを送受信できます。

Q. WebSocketとHTTPの違いは?

HTTPはリクエスト-レスポンス型の半二重通信、WebSocketは全二重通信です。リアルタイム性が必要な場合にWebSocketが適しています。

Q. WebSocketとSSEの使い分けは?

SSEはサーバー→クライアントの一方向通信で実装が簡単。WebSocketは双方向通信が可能。AI応答にはSSE、チャットやゲームにはWebSocketが使われます。

Q. Socket.IOとWebSocketの違いは?

Socket.IOはWebSocketを基盤に、自動再接続やルーム機能などを追加したライブラリです。WebSocketが使えない環境でも自動フォールバックします。

この用語についてもっと詳しく

リアルタイム通信システムの設計・開発に関するご相談は、お気軽にお問い合わせください。