const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
var sticky = require('sticky-session');
var express = require('express');
var app = express();
app.get('/', function (req, res) {
console.log('worker: ' + cluster.worker.id);
res.send('Hello World!');
});
var server = http.createServer(app);
sticky.listen(server,3000);
console.log(`Worker ${process.pid} started`);
}
Я просмотрел документацию по кластеризации nodejs и sticky-session, а также еще один ответ о переполнении стека по этому поводу.
var cluster = require('cluster');
var http = require('http');
var sticky = require('sticky-session');
var express = require('express');
var app = express();
app.get('/', function (req, res) {
console.log('worker: ' + cluster.worker.id);
res.send('Hello World!');
});
var server = http.createServer(app);
sticky.listen(server,3000);
Если приведенный выше фрагмент запускается без разветвления, он работает нормально, но в противном случае он никогда не работает, как показано в приведенном выше кластерном примере, в котором потоки запускаются, но сервер никогда не инициализируется.
Я читал, что есть альтернатива sticky-cluster. Может ли кто-нибудь дать правильный авторитетный ответ по этой теме, который будет полезен для людей, которые ищут то же самое, и еще одна основная проблема связана с этим - это объект app.locals, который используется для хранения переменных для экземпляр приложения и появление нескольких экземпляров сервера приводят к тому, что это ломается, поскольку значения будут разными в разных экземплярах, поэтому этот подход вызывает большую проблему, и приложение ломается, поэтому. приблизиться к его преимуществам и недостаткам.
Я не ищу ответ, который ограничивается использованием модуля sticky-sessions nodejs, я приветствую все другие подходы, в которых используются все ядра процессора и но обеспечивается непрерывность сеанса.
Если это связано с RedisStore или MongoDb, все в порядке. Я хочу знать о стандартном подходе в случае приложения nodejs с кластеризацией с непрерывностью сеанса.
https://github.com/indutny/sticky-session