From ba92426fa4981502c66d84667667135d6ea8c77c Mon Sep 17 00:00:00 2001 From: Arlo Breault Date: Fri, 22 Mar 2013 16:02:34 -0700 Subject: [PATCH 1/4] expose bufferedAmount --- lib/WebSocket.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/WebSocket.js b/lib/WebSocket.js index 70de62f37..d1f279f28 100644 --- a/lib/WebSocket.js +++ b/lib/WebSocket.js @@ -271,6 +271,16 @@ WebSocket.prototype.terminate = function() { } }; +/** + * Expose bufferedAmount + * + * @api public + */ + +WebSocket.prototype.__defineGetter__('bufferedAmount', function() { + return this._socket ? this._socket._writableState.length : 0; +}); + /** * Emulates the W3C Browser based WebSocket interface using function members. * From 28e3628907f6186a2e17d7d51977841c5d5da08a Mon Sep 17 00:00:00 2001 From: Arlo Breault Date: Fri, 22 Mar 2013 16:43:14 -0700 Subject: [PATCH 2/4] use bufferSize instead --- lib/WebSocket.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WebSocket.js b/lib/WebSocket.js index d1f279f28..ba625c15d 100644 --- a/lib/WebSocket.js +++ b/lib/WebSocket.js @@ -278,7 +278,7 @@ WebSocket.prototype.terminate = function() { */ WebSocket.prototype.__defineGetter__('bufferedAmount', function() { - return this._socket ? this._socket._writableState.length : 0; + return this._socket ? this._socket.bufferSize : 0; }); /** From b519959c043077235e776d2a9a853b32c2deaf22 Mon Sep 17 00:00:00 2001 From: Arlo Breault Date: Fri, 29 Mar 2013 07:56:52 -0700 Subject: [PATCH 3/4] use Object.defineProperty --- lib/WebSocket.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/WebSocket.js b/lib/WebSocket.js index ba625c15d..b52d20e9b 100644 --- a/lib/WebSocket.js +++ b/lib/WebSocket.js @@ -277,8 +277,10 @@ WebSocket.prototype.terminate = function() { * @api public */ -WebSocket.prototype.__defineGetter__('bufferedAmount', function() { - return this._socket ? this._socket.bufferSize : 0; +Object.defineProperty(WebSocket.prototype, 'bufferedAmount', { + get: function get() { + return this._socket ? this._socket.bufferSize : 0; + } }); /** From 4a720ebeb2b56404b6832af4eaaf862958d722c4 Mon Sep 17 00:00:00 2001 From: Arlo Breault Date: Sat, 30 Mar 2013 12:13:47 -0700 Subject: [PATCH 4/4] test bufferedAmount --- test/WebSocket.test.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/test/WebSocket.test.js b/test/WebSocket.test.js index 71859476c..b93f7a697 100644 --- a/test/WebSocket.test.js +++ b/test/WebSocket.test.js @@ -80,6 +80,38 @@ describe('WebSocket', function() { }); }); + describe('#bufferedAmount', function() { + it('defaults to zero', function(done) { + server.createServer(++port, function(srv) { + var url = 'ws://localhost:' + port; + var ws = new WebSocket(url); + assert.equal(0, ws.bufferedAmount); + ws.terminate(); + ws.on('close', function() { + srv.close(); + done(); + }); + }); + }); + + it('stress kernel write buffer', function(done) { + var wss = new WebSocketServer({port: ++port}, function() { + var ws = new WebSocket('ws://localhost:' + port); + }); + wss.on('connection', function(ws) { + while (true) { + if (ws.bufferedAmount > 0) break; + ws.send((new Array(10000)).join('hello')); + } + ws.terminate(); + ws.on('close', function() { + wss.close(); + done(); + }); + }); + }); + }); + describe('#readyState', function() { it('defaults to connecting', function(done) { server.createServer(++port, function(srv) {