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",
|
||||
"express": "^4.18.2",
|
||||
"jsonwebtoken": "^9.0.0",
|
||||
"redis": "^4.6.4",
|
||||
"socket.io": "^4.6.0",
|
||||
"ua-parser-js": "^1.0.33",
|
||||
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.19.0"
|
||||
"redis": "^4.6.5",
|
||||
"socket.io": "^4.6.1",
|
||||
"ua-parser-js": "^1.0.35",
|
||||
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.20.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@maxmind/geoip2-node": {
|
||||
|
|
@ -117,9 +117,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "18.15.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.1.tgz",
|
||||
"integrity": "sha512-U2TWca8AeHSmbpi314QBESRk7oPjSZjDsR+c+H4ECC1l+kFgpZf8Ydhv3SJpPy51VyZHHqxlb6mTTqYNNRVAIw=="
|
||||
"version": "18.15.11",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
|
||||
"integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q=="
|
||||
},
|
||||
"node_modules/accepts": {
|
||||
"version": "1.3.8",
|
||||
|
|
@ -688,12 +688,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/maxmind": {
|
||||
"version": "4.3.8",
|
||||
"resolved": "https://registry.npmjs.org/maxmind/-/maxmind-4.3.8.tgz",
|
||||
"integrity": "sha512-HrfxEu5yPBPtTy/OT+W5bPQwEfLUX0EHqe2EbJiB47xQMumHqXvSP7PAwzV8Z++NRCmQwy4moQrTSt0+dH+Jmg==",
|
||||
"version": "4.3.10",
|
||||
"resolved": "https://registry.npmjs.org/maxmind/-/maxmind-4.3.10.tgz",
|
||||
"integrity": "sha512-H83pPwi4OqpjPmvAVtuimVWFe6JwHdFK+UIzq4KdvQrKUMLieIrsvU/A9N8jbmOqC2JJPA+jtlFwodyqmzl/3w==",
|
||||
"dependencies": {
|
||||
"mmdb-lib": "2.0.2",
|
||||
"tiny-lru": "9.0.3"
|
||||
"tiny-lru": "10.4.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12",
|
||||
|
|
@ -1046,11 +1046,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/tiny-lru": {
|
||||
"version": "9.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-9.0.3.tgz",
|
||||
"integrity": "sha512-/i9GruRjXsnDgehxvy6iZ4AFNVxngEFbwzirhdulomMNPGPVV3ECMZOWSw0w4sRMZ9Al9m4jy08GPvRxRUGYlw==",
|
||||
"version": "10.4.1",
|
||||
"resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-10.4.1.tgz",
|
||||
"integrity": "sha512-buLIzw7ppqymuO3pt10jHk/6QMeZLbidihMQU+N6sogF6EnBzG0qtDWIHuhw1x3dyNgVL/KTGIZsTK81+yCzLg==",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/toidentifier": {
|
||||
|
|
@ -1085,9 +1085,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/ua-parser-js": {
|
||||
"version": "1.0.34",
|
||||
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.34.tgz",
|
||||
"integrity": "sha512-K9mwJm/DaB6mRLZfw6q8IMXipcrmuT6yfhYmwhAkuh+81sChuYstYA+znlgaflUPaYUa3odxKPKGw6Vw/lANew==",
|
||||
"version": "1.0.35",
|
||||
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz",
|
||||
"integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
|
|
@ -1127,8 +1127,8 @@
|
|||
}
|
||||
},
|
||||
"node_modules/uWebSockets.js": {
|
||||
"version": "20.19.0",
|
||||
"resolved": "git+ssh://git@github.com/uNetworking/uWebSockets.js.git#42c9c0d5d31f46ca4115dc75672b0037ec970f28"
|
||||
"version": "20.20.0",
|
||||
"resolved": "git+ssh://git@github.com/uNetworking/uWebSockets.js.git#70291680f6052af5306191b6ed88bceb58e49aa2"
|
||||
},
|
||||
"node_modules/vary": {
|
||||
"version": "1.1.2",
|
||||
|
|
|
|||
|
|
@ -22,9 +22,9 @@
|
|||
"@socket.io/redis-adapter": "^8.1.0",
|
||||
"express": "^4.18.2",
|
||||
"jsonwebtoken": "^9.0.0",
|
||||
"redis": "^4.6.4",
|
||||
"socket.io": "^4.6.0",
|
||||
"ua-parser-js": "^1.0.33",
|
||||
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.19.0"
|
||||
"redis": "^4.6.5",
|
||||
"socket.io": "^4.6.1",
|
||||
"ua-parser-js": "^1.0.35",
|
||||
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.20.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@ const {
|
|||
const {
|
||||
extractProjectKeyFromRequest,
|
||||
extractSessionIdFromRequest,
|
||||
extractPayloadFromRequest
|
||||
extractPayloadFromRequest,
|
||||
getCompressionConfig
|
||||
} = require('../utils/helper-ee');
|
||||
const {createAdapter} = require("@socket.io/redis-adapter");
|
||||
const {createClient} = require("redis");
|
||||
|
|
@ -39,7 +40,8 @@ const createSocketIOServer = function (server, prefix) {
|
|||
origin: "*",
|
||||
methods: ["GET", "POST", "PUT"]
|
||||
},
|
||||
path: (prefix ? prefix : '') + '/socket'
|
||||
path: (prefix ? prefix : '') + '/socket',
|
||||
perMessageDeflate: getCompressionConfig()
|
||||
});
|
||||
} else {
|
||||
io = new _io.Server({
|
||||
|
|
@ -48,9 +50,8 @@ const createSocketIOServer = function (server, prefix) {
|
|||
origin: "*",
|
||||
methods: ["GET", "POST", "PUT"]
|
||||
},
|
||||
path: (prefix ? prefix : '') + '/socket'
|
||||
// transports: ['websocket'],
|
||||
// upgrade: false
|
||||
path: (prefix ? prefix : '') + '/socket',
|
||||
perMessageDeflate: getCompressionConfig()
|
||||
});
|
||||
io.attachApp(server);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ const {
|
|||
extractProjectKeyFromRequest,
|
||||
extractSessionIdFromRequest,
|
||||
extractPayloadFromRequest,
|
||||
getCompressionConfig
|
||||
} = require('../utils/helper-ee');
|
||||
const wsRouter = express.Router();
|
||||
|
||||
|
|
@ -34,7 +35,8 @@ const createSocketIOServer = function (server, prefix) {
|
|||
origin: "*",
|
||||
methods: ["GET", "POST", "PUT"]
|
||||
},
|
||||
path: (prefix ? prefix : '') + '/socket'
|
||||
path: (prefix ? prefix : '') + '/socket',
|
||||
perMessageDeflate: getCompressionConfig()
|
||||
});
|
||||
} else {
|
||||
io = new _io.Server({
|
||||
|
|
@ -43,9 +45,8 @@ const createSocketIOServer = function (server, prefix) {
|
|||
origin: "*",
|
||||
methods: ["GET", "POST", "PUT"]
|
||||
},
|
||||
path: (prefix ? prefix : '') + '/socket'
|
||||
// transports: ['websocket'],
|
||||
// upgrade: false
|
||||
path: (prefix ? prefix : '') + '/socket',
|
||||
perMessageDeflate: getCompressionConfig()
|
||||
});
|
||||
io.attachApp(server);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,8 +95,44 @@ const extractPayloadFromRequest = async function (req, res) {
|
|||
debug && console.log("payload/filters:" + JSON.stringify(filters))
|
||||
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 = {
|
||||
extractProjectKeyFromRequest,
|
||||
extractSessionIdFromRequest,
|
||||
extractPayloadFromRequest
|
||||
extractPayloadFromRequest,
|
||||
getCompressionConfig
|
||||
};
|
||||
Loading…
Add table
Reference in a new issue