2013-07-13 31 views
13

Çok çekirdekli makinelerde (a.k.a. kümeleme) yararlanacak olan nodejs uygulamasını oluşturmaya çalışıyorum ve oturumlar hakkında bir sorum var. Benim kod şöyle görünür:Nodejs Kümeleme ve ekspres oturumları

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 

} 

Sorum şu: Her şey tek bir kullanıcı rasgele düğüm örneği vurur veya örneğin ilk kez o sayfayı açar ve düğüm N4 vurur ve onun oturum sona kadar, o üzerine düğüm N4 vurmak her istek Sorumu anlamayanlar için endişelenen şeyi açıklamaya çalışacağım: Bir kullanıcı sayfama girer, N3 düğümünde oturum açar, ardından req.session.userdata'yı rastgele bir veri olarak ayarlar, yeniler sayfa ve Node N4'ü vurdu, farklı Node'dan req.session.userdata'ya erişebilecek miyim? Yani, kullanıcının rastgele çıkış yapması için bir şans var mı, yoksa ifade çalışmalarıyla nasıl bir kümelenme olduğunu anlamıyorum.

cevap

11

Connect/Express'teki bellek oturumu deposunun birden fazla örneği desteklemede uygun olmadığı konusunda haklısınız. Çözüm, bir destek veritabanı ile bir oturum deposu uygulamaktır. Benim önerim connect-redis'tir ve örnek kod Session Undefined - Using Connect-Redis/ExpressJS/Node

'dur. Ancak onlarca seçenek vardır.