WebSocket

WebSocketとは

WebSocketとは、Webサーバとクライアント間の双方向通信やリアルタイム通信を少ない通信量で行うためのプロトコルのこと。
 

WebSocketの特徴

HTTP通信(HTTP/1.1)と比較したWebSocketの特徴は下記の通り。

双方向通信が可能

HTTP通信では、Webサーバはクライアントからのリクエストへ応答するのみで、能動的に情報を送信できない。
Webサーバのリクエストも可能にする手法もあるが処理に無駄がある。
 
一方WebSocketは、一度通信を確立した後であればWebサーバからもリアルタイムでリクエストを送信できる。
 

通信量が少ない

HTTP通信では、ヘッダのデータサイズが大きく、毎回の通信で同じヘッダ情報を送る必要がある。
また、毎回リクエスト/レスポンスのやりとりをし、1つのコネクションで1つのリクエストしか送ることができない。
 
一方WebSocketは、ヘッダのデータサイズが2〜14 byteと最小限で構成される。
また、1つのコネクションで全てのデータの送受信を行うことができる。

WebSocketの通信フロー

 
① HTTPコネクションの確立
通常のHTTP通信のコネクションを確立。 HTTPのインフラを活用してWebSocket通信を実現する。
 
② WebSocketハンドシェイク
WebSocket通信をするための準備。
  • クライアントはスキーマが「ws:」(SSL/TLS利用の場合は「wss:」) のHTTPリクエストを送信
  • サーバは接続が成功するとステータスコード「101」のレスポンスを返す。
 
③ WebSocketでのデータ転送
ハンドシェイクに利用したTCPコネクションをそのまま使い続けてデータ転送を行う。 「フレーム」と呼ばれる単位でデータを送信。
  • フレームのヘッダデータは2〜14 byte
  • フレームのタイプはopcodeの値で識別
 

WebSocketハンドシェイクでのHTTPヘッダ

参考リンク