2013-07-13 12 views
13

Ich versuche, nodejs Anwendung zu bauen, die Multicore-Maschinen (a.k.a.Clustering) nutzen wird und ich habe eine Frage über Sitzungen. Mein Code sieht wie folgt aus:Nodejs Clustering und expressjs Sitzungen

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 

} 

Meine Frage ist: Jedesmal, wenn ein einzelner Benutzer trifft zufällig Knoteninstanz oder zum Beispiel das erste Mal öffnet er die Seite und trifft N4 Knoten und bis zu seiner Sitzung abläuft, er traf Knoten N4 auf jede Anfrage? Für diejenigen, die meine Frage nicht verstanden haben, werde ich versuchen zu erklären, worüber ich mir Sorgen mache: Ein Benutzer gibt meine Seite ein, er loggt sich auf Knoten N3 ein, dann setze ich req.session.userdata auf zufällige Daten, er aktualisiert sich die Seite und er knackte Knoten N4, kann ich req.session.userdata von verschiedenen Knoten zugreifen? Das bedeutet, dass es eine Chance für den Benutzer gibt, zufällig ausgeloggt zu werden, oder ich verstehe einfach nicht, wie Clustering mit Express funktioniert?

Antwort

11

Sie haben Recht, dass der Sitzungsspeicher im Speicher in Connect/Express nicht für die Unterstützung mehrerer Instanzen geeignet ist. Die Lösung besteht darin, einen Sitzungsspeicher mit einer Sicherungsdatenbank zu implementieren. Meine Empfehlung ist connect-redis, und Beispiel-Code ist bei Session Undefined - Using Connect-Redis/ExpressJS/Node

Aber es gibt Dutzende von Optionen.

Verwandte Themen