2013-07-13 23 views
13

Próbuję zbudować aplikację nodejs, która skorzysta z maszyn wielordzeniowych (klastry a.k.a) i mam pytanie dotyczące sesji. Mój kod wygląda następująco:Sesje grupowania i ekspresji Nodejsa

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 

} 

Moje pytanie brzmi: Everytime jeden użytkownik uderza losowy przykład węzeł lub na przykład pierwszy raz otwiera stronę i uderza węzła N4 i aż wygaśnie jego sesja, uderzył węzła N4 na każda prośba? Dla tych, którzy nie zrozumieli mojego pytania, postaram się wyjaśnić, o co się martwię: Użytkownik wchodzi na moją stronę, loguje się na węźle N3, a następnie ustawiam plik req.session.userdata na losowe dane, on odświeża na stronie i trafił Node N4, czy będę mógł uzyskać dostęp do req.session.userdata z innego Węzła? Oznacza to, że użytkownik może zostać losowo wylogowany lub po prostu nie rozumiem, jak działa klastrowanie przy użyciu ekspresu?

Odpowiedz

11

Masz rację, że pamięć sesji w pamięci w Connect/Express jest nieodpowiednia do obsługi więcej niż jednej instancji. Rozwiązaniem jest wdrożenie magazynu sesji z bazą danych. Moja rekomendacja to connect-redis, a przykładowy kod to: Session Undefined - Using Connect-Redis/ExpressJS/Node

Ale są dziesiątki opcji.