WebSocket
WebSocket は単一 の TCP 接続 で全二重 通信 を行 うプロトコル。
接続フロー
- TCP Connection
- WebSocket Handshake
- 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 Polling | HTTP Stream | WebSocket |
|---|---|---|---|
| 全二重 | No | No | Yes |
| 低遅延 | 中 | 中 | 高 |
| Header オーバーヘッド | 毎回 | 1 回 | ハンドシェイクのみ |
適用シナリオ
- リアルタイムチャット
- 共同 編集 ツール
- オンラインゲーム
- 株価 配信