feat(assist): WS message compression support
This commit is contained in:
parent
b10390c509
commit
802be323df
5 changed files with 72 additions and 34 deletions
40
ee/assist/package-lock.json
generated
40
ee/assist/package-lock.json
generated
|
|
@ -13,10 +13,10 @@
|
||||||
"@socket.io/redis-adapter": "^8.1.0",
|
"@socket.io/redis-adapter": "^8.1.0",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
"jsonwebtoken": "^9.0.0",
|
"jsonwebtoken": "^9.0.0",
|
||||||
"redis": "^4.6.4",
|
"redis": "^4.6.5",
|
||||||
"socket.io": "^4.6.0",
|
"socket.io": "^4.6.1",
|
||||||
"ua-parser-js": "^1.0.33",
|
"ua-parser-js": "^1.0.35",
|
||||||
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.19.0"
|
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.20.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@maxmind/geoip2-node": {
|
"node_modules/@maxmind/geoip2-node": {
|
||||||
|
|
@ -117,9 +117,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "18.15.1",
|
"version": "18.15.11",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
|
||||||
"integrity": "sha512-U2TWca8AeHSmbpi314QBESRk7oPjSZjDsR+c+H4ECC1l+kFgpZf8Ydhv3SJpPy51VyZHHqxlb6mTTqYNNRVAIw=="
|
"integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q=="
|
||||||
},
|
},
|
||||||
"node_modules/accepts": {
|
"node_modules/accepts": {
|
||||||
"version": "1.3.8",
|
"version": "1.3.8",
|
||||||
|
|
@ -688,12 +688,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/maxmind": {
|
"node_modules/maxmind": {
|
||||||
"version": "4.3.8",
|
"version": "4.3.10",
|
||||||
"resolved": "https://registry.npmjs.org/maxmind/-/maxmind-4.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/maxmind/-/maxmind-4.3.10.tgz",
|
||||||
"integrity": "sha512-HrfxEu5yPBPtTy/OT+W5bPQwEfLUX0EHqe2EbJiB47xQMumHqXvSP7PAwzV8Z++NRCmQwy4moQrTSt0+dH+Jmg==",
|
"integrity": "sha512-H83pPwi4OqpjPmvAVtuimVWFe6JwHdFK+UIzq4KdvQrKUMLieIrsvU/A9N8jbmOqC2JJPA+jtlFwodyqmzl/3w==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"mmdb-lib": "2.0.2",
|
"mmdb-lib": "2.0.2",
|
||||||
"tiny-lru": "9.0.3"
|
"tiny-lru": "10.4.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12",
|
"node": ">=12",
|
||||||
|
|
@ -1046,11 +1046,11 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tiny-lru": {
|
"node_modules/tiny-lru": {
|
||||||
"version": "9.0.3",
|
"version": "10.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-9.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-10.4.1.tgz",
|
||||||
"integrity": "sha512-/i9GruRjXsnDgehxvy6iZ4AFNVxngEFbwzirhdulomMNPGPVV3ECMZOWSw0w4sRMZ9Al9m4jy08GPvRxRUGYlw==",
|
"integrity": "sha512-buLIzw7ppqymuO3pt10jHk/6QMeZLbidihMQU+N6sogF6EnBzG0qtDWIHuhw1x3dyNgVL/KTGIZsTK81+yCzLg==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/toidentifier": {
|
"node_modules/toidentifier": {
|
||||||
|
|
@ -1085,9 +1085,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ua-parser-js": {
|
"node_modules/ua-parser-js": {
|
||||||
"version": "1.0.34",
|
"version": "1.0.35",
|
||||||
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.34.tgz",
|
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz",
|
||||||
"integrity": "sha512-K9mwJm/DaB6mRLZfw6q8IMXipcrmuT6yfhYmwhAkuh+81sChuYstYA+znlgaflUPaYUa3odxKPKGw6Vw/lANew==",
|
"integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
|
|
@ -1127,8 +1127,8 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/uWebSockets.js": {
|
"node_modules/uWebSockets.js": {
|
||||||
"version": "20.19.0",
|
"version": "20.20.0",
|
||||||
"resolved": "git+ssh://git@github.com/uNetworking/uWebSockets.js.git#42c9c0d5d31f46ca4115dc75672b0037ec970f28"
|
"resolved": "git+ssh://git@github.com/uNetworking/uWebSockets.js.git#70291680f6052af5306191b6ed88bceb58e49aa2"
|
||||||
},
|
},
|
||||||
"node_modules/vary": {
|
"node_modules/vary": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,9 @@
|
||||||
"@socket.io/redis-adapter": "^8.1.0",
|
"@socket.io/redis-adapter": "^8.1.0",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
"jsonwebtoken": "^9.0.0",
|
"jsonwebtoken": "^9.0.0",
|
||||||
"redis": "^4.6.4",
|
"redis": "^4.6.5",
|
||||||
"socket.io": "^4.6.0",
|
"socket.io": "^4.6.1",
|
||||||
"ua-parser-js": "^1.0.33",
|
"ua-parser-js": "^1.0.35",
|
||||||
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.19.0"
|
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.20.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,8 @@ const {
|
||||||
const {
|
const {
|
||||||
extractProjectKeyFromRequest,
|
extractProjectKeyFromRequest,
|
||||||
extractSessionIdFromRequest,
|
extractSessionIdFromRequest,
|
||||||
extractPayloadFromRequest
|
extractPayloadFromRequest,
|
||||||
|
getCompressionConfig
|
||||||
} = require('../utils/helper-ee');
|
} = require('../utils/helper-ee');
|
||||||
const {createAdapter} = require("@socket.io/redis-adapter");
|
const {createAdapter} = require("@socket.io/redis-adapter");
|
||||||
const {createClient} = require("redis");
|
const {createClient} = require("redis");
|
||||||
|
|
@ -39,7 +40,8 @@ const createSocketIOServer = function (server, prefix) {
|
||||||
origin: "*",
|
origin: "*",
|
||||||
methods: ["GET", "POST", "PUT"]
|
methods: ["GET", "POST", "PUT"]
|
||||||
},
|
},
|
||||||
path: (prefix ? prefix : '') + '/socket'
|
path: (prefix ? prefix : '') + '/socket',
|
||||||
|
perMessageDeflate: getCompressionConfig()
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
io = new _io.Server({
|
io = new _io.Server({
|
||||||
|
|
@ -48,9 +50,8 @@ const createSocketIOServer = function (server, prefix) {
|
||||||
origin: "*",
|
origin: "*",
|
||||||
methods: ["GET", "POST", "PUT"]
|
methods: ["GET", "POST", "PUT"]
|
||||||
},
|
},
|
||||||
path: (prefix ? prefix : '') + '/socket'
|
path: (prefix ? prefix : '') + '/socket',
|
||||||
// transports: ['websocket'],
|
perMessageDeflate: getCompressionConfig()
|
||||||
// upgrade: false
|
|
||||||
});
|
});
|
||||||
io.attachApp(server);
|
io.attachApp(server);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ const {
|
||||||
extractProjectKeyFromRequest,
|
extractProjectKeyFromRequest,
|
||||||
extractSessionIdFromRequest,
|
extractSessionIdFromRequest,
|
||||||
extractPayloadFromRequest,
|
extractPayloadFromRequest,
|
||||||
|
getCompressionConfig
|
||||||
} = require('../utils/helper-ee');
|
} = require('../utils/helper-ee');
|
||||||
const wsRouter = express.Router();
|
const wsRouter = express.Router();
|
||||||
|
|
||||||
|
|
@ -34,7 +35,8 @@ const createSocketIOServer = function (server, prefix) {
|
||||||
origin: "*",
|
origin: "*",
|
||||||
methods: ["GET", "POST", "PUT"]
|
methods: ["GET", "POST", "PUT"]
|
||||||
},
|
},
|
||||||
path: (prefix ? prefix : '') + '/socket'
|
path: (prefix ? prefix : '') + '/socket',
|
||||||
|
perMessageDeflate: getCompressionConfig()
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
io = new _io.Server({
|
io = new _io.Server({
|
||||||
|
|
@ -43,9 +45,8 @@ const createSocketIOServer = function (server, prefix) {
|
||||||
origin: "*",
|
origin: "*",
|
||||||
methods: ["GET", "POST", "PUT"]
|
methods: ["GET", "POST", "PUT"]
|
||||||
},
|
},
|
||||||
path: (prefix ? prefix : '') + '/socket'
|
path: (prefix ? prefix : '') + '/socket',
|
||||||
// transports: ['websocket'],
|
perMessageDeflate: getCompressionConfig()
|
||||||
// upgrade: false
|
|
||||||
});
|
});
|
||||||
io.attachApp(server);
|
io.attachApp(server);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,8 +95,44 @@ const extractPayloadFromRequest = async function (req, res) {
|
||||||
debug && console.log("payload/filters:" + JSON.stringify(filters))
|
debug && console.log("payload/filters:" + JSON.stringify(filters))
|
||||||
return Object.keys(filters).length > 0 ? filters : undefined;
|
return Object.keys(filters).length > 0 ? filters : undefined;
|
||||||
}
|
}
|
||||||
|
const getCompressionConfig = function () {
|
||||||
|
let perMessageDeflate = false;
|
||||||
|
if (process.env.COMPRESSION_LEVEL && process.env.COMPRESSION_LEVEL > 0) {
|
||||||
|
if (process.env.COMPRESSION_LEVEL > 3) {
|
||||||
|
console.log(`WS compression level: ${process.env.COMPRESSION_LEVEL} not found, ignoring`);
|
||||||
|
} else {
|
||||||
|
let windowBits;
|
||||||
|
switch (parseInt(process.env.COMPRESSION_LEVEL)) {
|
||||||
|
case 1:
|
||||||
|
windowBits = 8;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
windowBits = 10;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
windowBits = 11;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
console.log(`WS compression level: ${process.env.COMPRESSION_LEVEL} => windowBits: ${windowBits}`);
|
||||||
|
perMessageDeflate = {
|
||||||
|
zlibDeflateOptions: {
|
||||||
|
windowBits: windowBits,
|
||||||
|
memLevel: 1
|
||||||
|
},
|
||||||
|
|
||||||
|
zlibInflateOptions: {
|
||||||
|
windowBits: windowBits
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(`WS compression level: disabled`);
|
||||||
|
}
|
||||||
|
return perMessageDeflate;
|
||||||
|
}
|
||||||
module.exports = {
|
module.exports = {
|
||||||
extractProjectKeyFromRequest,
|
extractProjectKeyFromRequest,
|
||||||
extractSessionIdFromRequest,
|
extractSessionIdFromRequest,
|
||||||
extractPayloadFromRequest
|
extractPayloadFromRequest,
|
||||||
|
getCompressionConfig
|
||||||
};
|
};
|
||||||
Loading…
Add table
Reference in a new issue