2013-07-13 12 views
13

Sto provando a creare l'applicazione nodejs che sfrutterà le macchine multicore (a.k.a. clustering) e ho una domanda sulle sessioni. Il mio codice è simile al seguente:Nodejs Clustering e sessioni expressjs

var cluster = exports.cluster = require('cluster'); 
var numCPUs = require('os').cpus().length; 

if (cluster.isMaster) { 

    for (var i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 

    cluster.on('exit', function(worker, code, signal) { 
    console.log('worker ' + worker.process.pid + ' died. Trying to respawn...'); 
    cluster.fork(); 
    }); 

} else { 

//spawn express etc 

} 

La mia domanda è: Ogni volta che un singolo utente preme esempio nodo casuale o per esempio la prima volta che si apre la pagina e colpisce nodo N4 e fino alla sua sessione scade, ha colpito il nodo N4 su ogni richiesta? Per coloro che non hanno capito la mia domanda, cercherò di spiegare di cosa sono preoccupato: Un utente entra nella mia pagina, accede al nodo N3, quindi ho impostato req.session.userdata su un dato casuale, aggiorna la pagina e ha colpito il nodo N4, sarò in grado di accedere a req.session.userdata da Nodo diverso? Ciò significa che esiste la possibilità che l'utente venga disconnesso casualmente o che io non stia proprio comprendendo come il clustering con i lavori rapidi?

risposta

11

È corretto che l'archivio di sessioni in memoria in Connect/Express non sia adatto per supportare più di un'istanza. La soluzione è implementare un archivio di sessioni con un database di supporto. La mia raccomandazione è connect-redis, e il codice di esempio è Session Undefined - Using Connect-Redis/ExpressJS/Node

Ma ci sono dozzine di opzioni.