WebSocket接続

接続 (WebSocket)

[14] WebSocket接続 (connection) は、 TCP または TLS over TCP 上に確立されたWebSocketクライアントWebSocketサーバーとの間の転送路です。

仕様書

状態

[5] 接続は、通常のHTTP接続の状態に加え、次の状態を持ちます。

種類
WebSocketクライアントWebSocketサーバーのいずれかです。
接続の状態
readyState 属性に相当する実際の接続の状態です。
バッファー
送信待ちのデータです。
不完全なメッセージ
断片化されたフレームの到着待ちの受信データです。
WebSocket接続失敗
WebSocket接続失敗として処理されたかどうかのフラグです。
flagged as full
Closeフレーム送信済み
Closeフレーム受信済み

[10] クライアントは (WebSocket オブジェクトは)、 更に次の状態を持ちます。

クライアント指定プロトコル群
構築時に指定された部分プロトコルのリストです。
URL
接続先の URL です。
readyState
接続の状態と同じですが、イベントループの処理に合わせて若干の遅延があるかもしれません。
extensions
利用中のWebSocket拡張を示す文字列です。
protocol
利用中の部分プロトコルを示す文字列です。
bufferedAmount
バッファーの大きさを表しますが、イベントループの処理に合わせて若干の遅延があるかもしれません。
binaryType

[15] アプリケーションは、更に独自の状態を保持するかもしれません。 その中には TCP/TLSWebSocket handshake で得られた情報 (例えば IPアドレスTLS証明書HTTP認証データ、CookieAccept-Language: など) も含まれるかもしれません。

WebSocket インターフェイス readyState 属性

[6] WebSocket インターフェイスreadyState 属性は、 WebSocket接続の状態を表します。

[7] WebSocket インターフェイスには 4つの unsigned short 定数が定義されています >>4。 そのいずれかを返すことになっています。

CONNECTING (0)
接続がまだ確立されていないことを表します >>4
OPEN (1)
接続が確立され通信できることを表します >>4
CLOSING (2)
接続closing handshake が進行中か close が呼び出されたことを表します >>4
CLOSED (3)
接続が閉じられたか開けなかったことを表します >>4

[9] これらの属性値の変更は、WebSocket接続の確立WebSocket接続を閉じるの処理の中で行われます。

[8] これらの定数は HTML Standard で規定されています。 RFC 6455 でも定数名は言及されていますが、それが何であるかは全く説明がありません。

[11] WebSocketスクリプト (イベントループ) は別個に動作します。 WebSocket接続の状態としてプロトコル側が保持している値と readyState 属性値は、更新されるタイミングが異なることがあります。

[12] WebSocketのごみ収集は、event loop step 1 時点での readyState の状態によって処理します。

[13] event loop step 1 開始前にごみ収集可能か検査しても良いとも解釈できます。

接続の確立

[1] WebSocket接続の確立を参照。

データの送受信

[3] WebSocketソケットデータソケットを参照。

接続の切断

[2] WebSocket接続を閉じるを参照。

下位層

[16] WebSocket の下位層としては、 TCP または TLS over TCP を用いることになっています。

[17] ただし TCP そのものではなく、プロキシへの接続 (SOCKSHTTP など) が使われる可能性もあります。

[19] TLS の利用方法は、 HTTPS と同じです。

[20] RFCTLS handshake のみ HTTPS と同じと規定しており、 それ以外には言及していません。しかし他の部分も HTTPS と同様に処理するべきと思われます。

[21] TCP の利用方法は、 WebSocket接続を閉じる際の処理が規定されている他は明確になっていません。 例えば TCP 緊急データをどう扱うべきかは不明です。

[22] HTTP接続も参照。