属性の説明に基づいて、すぐに返さなければならないbufferedAmount
と推測しました。それ以外の場合は常にゼロになるからです。0 以外の場合、send への以前の呼び出しからバッファリングされたデータが存在する必要があり、send がデータをバッファリングする場合、ブロックする理由はありません。send
bufferedAmount
http://dev.w3.org/html5/websockets/から
bufferedAmount属性は、send()を使用してキューに入れられたアプリケーション データ (UTF-8 テキストおよびバイナリ データ) のバイト数を返す必要がありますが、最後にイベント ループがタスクの実行を開始した時点で、まだ送信されていません。ネットワークに。(したがって、これには、ユーザー エージェントがスクリプトの実行と非同期でテキストを送信できるかどうかに関係なく、現在のタスクの実行中に送信されるテキストが含まれます。) これには、プロトコルによって発生するフレーミング オーバーヘッドや、オペレーティング システムによって行われるバッファリングは含まれません。またはネットワークハードウェア。接続が閉じられている場合、この属性の値はsend()メソッドの呼び出しごとに増加するだけです (接続が閉じられると
、数値はゼロにリセットされません)。
この単純な例では、bufferedAmount属性を使用して、ネットワークがその速度を処理できる場合は 50 ミリ秒ごとに 1 つの更新の速度で、または速すぎる場合はネットワークが処理できる速度で、更新が送信されるようにします。
var socket = new WebSocket('ws://game.example.com:12010/updates');
socket.onopen = function () {
setInterval(function() {
if (socket.bufferedAmount == 0)
socket.send(getUpdateData());
}, 50);
};
bufferedAmount属性を使用して、ネットワークが処理できるよりも高いレートでデータを送信せずにネットワークを飽和状態にすることもできますが、これには時間の経過とともに属性の値をより注意深く監視する必要があります。