From e1349c047d7f1c120ca606364e35d5c4c627c599 Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Wed, 24 Jun 2020 17:44:40 +0200 Subject: [PATCH] [fix] Take into account the data that is being compressed Improve `websocket.bufferedAmount` accuracy by taking into account the number of bytes of a message while it is being compressed. --- lib/sender.js | 2 ++ test/websocket.test.js | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/sender.js b/lib/sender.js index 75c78fb35..d385d6456 100644 --- a/lib/sender.js +++ b/lib/sender.js @@ -318,6 +318,7 @@ class Sender { const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + this._bufferedBytes += data.length; this._deflating = true; perMessageDeflate.compress(data, options.fin, (_, buf) => { if (this._socket.destroyed) { @@ -336,6 +337,7 @@ class Sender { return; } + this._bufferedBytes -= data.length; this._deflating = false; options.readOnly = false; this.sendFrame(Sender.frame(buf, options), cb); diff --git a/test/websocket.test.js b/test/websocket.test.js index ef3746028..64d52bec9 100644 --- a/test/websocket.test.js +++ b/test/websocket.test.js @@ -185,13 +185,16 @@ describe('WebSocket', () => { ws.on('open', () => { ws.send('foo'); + + assert.strictEqual(ws.bufferedAmount, 3); + ws.send('bar', (err) => { assert.ifError(err); assert.strictEqual(ws.bufferedAmount, 0); wss.close(done); }); - assert.strictEqual(ws.bufferedAmount, 3); + assert.strictEqual(ws.bufferedAmount, 6); }); } );