WebSocket

WebSocket は単一(たんいつ) の TCP 接続(せつぞく)全二重(ぜんにじゅう) 通信(つうしん)(おこな) うプロトコル。

接続フロー

  1. TCP Connection
  2. WebSocket Handshake
  3. Data Frame 転送(てんそう)
  sequenceDiagram
    participant Client
    participant Wss_Server
    Note over Client, Wss_Server: TCP connection
    Client ->> Wss_Server: tcp connection
    Wss_Server ->> Client: tcp connection
    Note over Client, Wss_Server: Websocket handshake
    Client ->> Wss_Server: http upgrade
    Wss_Server ->> Client: http upgrade
    Note over Client, Wss_Server: Data Frame
    Client ->> Wss_Server: control frame:ping
    Wss_Server ->> Client: control frame:pong
    Note over Client, Wss_Server: TCP Close

Handshake

WebSocket ハンドシェイクは HTTP/1.1 に(もと) づく。

Client → Server

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: [Base64 encoded UUID]

Server → Client

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: [signature]

WebSocket vs 他のソリューション

特性(とくせい)Long PollingHTTP StreamWebSocket
全二重(ぜんにじゅう)NoNoYes
低遅延(ていちえん)(ちゅう)(ちゅう)(こう)
Header オーバーヘッド毎回(まいかい)1 (かい)ハンドシェイクのみ

適用シナリオ

  • リアルタイムチャット
  • 共同(きょうどう) 編集(へんしゅう) ツール
  • オンラインゲーム
  • 株価(かぶか) 配信(はいしん)

関連トピック