WebSocket インターフェイス send メソッド[2] WebSocket インターフェイスの
send メソッドは、次のようにしなければなりません
>>1。
USVString, Blob,
ArrayBuffer, ArrayBufferView
のいずれかとして解釈します。readyState が CONNECTING なら、
InvalidStateError 例外を投げ、停止します。Blob なら、ArrayBuffer なら、ArrayBuffer のバッファーに蓄積されたデータに設定します。2) に設定します。ArrayBufferView なら、ArrayBuffer のバッファーに蓄積されたデータに設定します。2) に設定します。OPEN なら、bufferedAmount に、データのバイト数を加算します。[12] WebSocket接続においてWebSocketメッセージ送信するには、
次のようにしなければなりません >>11。opcode は、
データの種別により、テキストフレームまたはバイナリーフレームとします。
[13] データフレームを Closeフレームより後に送ってはなりません
>>7。
WebSocket接続の状態が OPEN でなければ (なくなれば)、
この手順は停止しなければなりません >>11。
[4] 実装時は、バッファーに一時的にフレームを書き込み、 適当な時機に OS (ソケット層) に引き渡すこととなります。 素朴な実装は、WebSocketメッセージ送信時に即座にソケットに送信する (= バッファリングしない) こととなります。より高度な実装は、その時機を調整できます。
[5] アプリケーション内でのバッファリングは、
bufferedAmount 属性によって著者が観測できます。
この属性の値は、 event loop step 1 で更新されます。
[7] アプリケーションのバッファーからネットワーク側へと引き渡されるまで、
WebSocket オブジェクトはごみ収集されないことになっています。
WebSocketのごみ収集を参照。[6] TCP のフロー制御などを含む OS 側でのバッファリングは、 アプリケーションからは検知できません。
[10] Chrome はすべて1つのフレームで送信するようです。 (しかしGB級のデータを送ろうとすると、クラッシュします。)
bufferedAmountは、送信されない場合でも増えていきます。