Skip to content

Commit 078527a

Browse files
feat: disable perMessageDeflate by default
The WebSocket permessage-deflate extension, while useful is some cases, adds some extra memory overhead for each WebSocket connection, and results in huge memory usage in production deployments. It will now be disabled by default.
1 parent 54c6797 commit 078527a

File tree

3 files changed

+30
-21
lines changed

3 files changed

+30
-21
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ to a single process.
239239
- `allowUpgrades` (`Boolean`): whether to allow transport upgrades
240240
(`true`)
241241
- `perMessageDeflate` (`Object|Boolean`): parameters of the WebSocket permessage-deflate extension
242-
(see [ws module](https://github.com/einaros/ws) api docs). Set to `false` to disable. (`true`)
242+
(see [ws module](https://github.com/einaros/ws) api docs). Set to `true` to enable. (defaults to `false`)
243243
- `threshold` (`Number`): data is compressed only if the byte size is above this value (`1024`)
244244
- `httpCompression` (`Object|Boolean`): parameters of the http compression for the polling transports
245245
(see [zlib](http://nodejs.org/api/zlib.html#zlib_options) api docs). Set to `false` to disable. (`true`)

lib/server.js

+9-3
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ class Server extends EventEmitter {
2929
maxHttpBufferSize: 1e6,
3030
transports: Object.keys(transports),
3131
allowUpgrades: true,
32-
perMessageDeflate: {
33-
threshold: 1024
34-
},
3532
httpCompression: {
3633
threshold: 1024
3734
},
@@ -56,6 +53,15 @@ class Server extends EventEmitter {
5653
this.corsMiddleware = require("cors")(this.opts.cors);
5754
}
5855

56+
if (opts.perMessageDeflate) {
57+
this.opts.perMessageDeflate = Object.assign(
58+
{
59+
threshold: 1024
60+
},
61+
opts.perMessageDeflate
62+
);
63+
}
64+
5965
this.init();
6066
}
6167

test/server.js

+20-17
Original file line numberDiff line numberDiff line change
@@ -2810,25 +2810,28 @@ describe("server", function() {
28102810
});
28112811

28122812
it("should not compress when the byte size is below threshold", function(done) {
2813-
var engine = listen({ transports: ["websocket"] }, function(port) {
2814-
engine.on("connection", function(conn) {
2815-
var socket = conn.transport.socket;
2816-
var send = socket.send;
2817-
socket.send = function(data, opts, callback) {
2818-
socket.send = send;
2819-
socket.send(data, opts, callback);
2813+
var engine = listen(
2814+
{ transports: ["websocket"], perMessageDeflate: true },
2815+
function(port) {
2816+
engine.on("connection", function(conn) {
2817+
var socket = conn.transport.socket;
2818+
var send = socket.send;
2819+
socket.send = function(data, opts, callback) {
2820+
socket.send = send;
2821+
socket.send(data, opts, callback);
28202822

2821-
expect(opts.compress).to.be(false);
2822-
conn.close();
2823-
done();
2824-
};
2823+
expect(opts.compress).to.be(false);
2824+
conn.close();
2825+
done();
2826+
};
28252827

2826-
var buf = Buffer.allocUnsafe(100);
2827-
for (var i = 0; i < buf.length; i++) buf[i] = i % 0xff;
2828-
conn.send(buf, { compress: true });
2829-
});
2830-
eioc("http://localhost:%d".s(port), { transports: ["websocket"] });
2831-
});
2828+
var buf = Buffer.allocUnsafe(100);
2829+
for (var i = 0; i < buf.length; i++) buf[i] = i % 0xff;
2830+
conn.send(buf, { compress: true });
2831+
});
2832+
eioc("http://localhost:%d".s(port), { transports: ["websocket"] });
2833+
}
2834+
);
28322835
});
28332836
});
28342837

0 commit comments

Comments
 (0)