adjust compression parameters and use permessage-deflate2 with threshold (only messages larger than 1kb (512 chars) are compressed by default)

This commit is contained in:
Leonardo Venturini
2024-11-09 22:13:13 -04:00
parent d7e90d8f49
commit b5fd7ac430
6 changed files with 35 additions and 9 deletions

17
package-lock.json generated
View File

@@ -15,6 +15,8 @@
"@babel/preset-react": "^7.18.6",
"@types/lodash.isempty": "^4.4.9",
"@types/node": "^18.16.18",
"@types/sockjs": "^0.3.36",
"@types/sockjs-client": "^1.5.4",
"@typescript-eslint/eslint-plugin": "^5.56.0",
"@typescript-eslint/parser": "^5.56.0",
"eslint": "^8.36.0",
@@ -1127,6 +1129,21 @@
"integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
"dev": true
},
"node_modules/@types/sockjs": {
"version": "0.3.36",
"resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz",
"integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/sockjs-client": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@types/sockjs-client/-/sockjs-client-1.5.4.tgz",
"integrity": "sha512-zk+uFZeWyvJ5ZFkLIwoGA/DfJ+pYzcZ8eH4H/EILCm2OBZyHH6Hkdna1/UWL/CFruh5wj6ES7g75SvUB0VsH5w==",
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",

View File

@@ -19,6 +19,8 @@
"@babel/preset-react": "^7.18.6",
"@types/lodash.isempty": "^4.4.9",
"@types/node": "^18.16.18",
"@types/sockjs": "^0.3.36",
"@types/sockjs-client": "^1.5.4",
"@typescript-eslint/eslint-plugin": "^5.56.0",
"@typescript-eslint/parser": "^5.56.0",
"eslint": "^8.36.0",

View File

@@ -5,7 +5,7 @@ Package.describe({
});
Npm.depends({
"permessage-deflate": "0.1.7",
"permessage-deflate2": "0.1.8-alpha.1",
sockjs: "0.3.24",
"lodash.once": "4.1.1",
"lodash.isempty": "4.4.0",

View File

@@ -1,4 +1,5 @@
import once from 'lodash.once';
import zlib from 'node:zlib';
// By default, we use the permessage-deflate extension with default
// configuration. If $SERVER_WEBSOCKET_COMPRESSION is set, then it must be valid
@@ -14,12 +15,18 @@ import once from 'lodash.once';
var websocketExtensions = once(function () {
var extensions = [];
var websocketCompressionConfig = process.env.SERVER_WEBSOCKET_COMPRESSION
? JSON.parse(process.env.SERVER_WEBSOCKET_COMPRESSION) : {};
var websocketCompressionConfig = process.env.SERVER_WEBSOCKET_COMPRESSION ?
JSON.parse(process.env.SERVER_WEBSOCKET_COMPRESSION) : {};
if (websocketCompressionConfig) {
extensions.push(Npm.require('permessage-deflate').configure(
websocketCompressionConfig
));
extensions.push(Npm.require('permessage-deflate2').configure({
threshold: 512,
level: zlib.constants.Z_BEST_SPEED,
memLevel: zlib.constants.Z_MIN_MEMLEVEL,
noContextTakeover: true,
maxWindowBits: zlib.constants.Z_MIN_WINDOWBITS,
...(websocketCompressionConfig || {})
}));
}
return extensions;

View File

@@ -1,6 +1,6 @@
import { Meteor } from "meteor/meteor";
import { toWebsocketUrl } from "./urls.js";
import { StreamClientCommon } from "./common.js";
import { toWebsocketUrl } from "./urls.js";
// @param endpoint {String} URL to Meteor app
// "http://subdomain.meteor.com/" or "/" or
@@ -132,7 +132,7 @@ export class ClientStream extends StreamClientCommon {
// require the module if we actually create a server-to-server
// connection.
var FayeWebSocket = Npm.require('faye-websocket');
var deflate = Npm.require('permessage-deflate');
var deflate = Npm.require('permessage-deflate2');
var targetUrl = toWebsocketUrl(this.endpoint);
var fayeOptions = {

View File

@@ -7,7 +7,7 @@ Package.describe({
Npm.depends({
"faye-websocket": "0.11.4",
"permessage-deflate": "0.1.7",
"permessage-deflate2": "0.1.8-alpha.1",
"lodash.isequal": "4.5.0",
"lodash.once": "4.1.1"
});