2013-07-13 6 views
13

私はマルチコアマシン(a.k.aクラスタリング)を利用するnodejsアプリケーションを構築しようとしています。セッションに関する質問があります。私のコードは次のようになります。Nodejsクラスタリングとセッションの表現

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 

} 

私の質問は次のとおりです。毎回1人のユーザーがランダムなノードインスタンスがヒットし、あるいは、例えば最初の時間は、彼がページを開き、ノードN4をヒットし、彼のセッションが期限切れになるまで、彼は上のノードN4をヒットすべてのリクエスト?私の質問を理解していない人のために、私は心配していることを説明しようとします: ユーザーが自分のページを入力し、ノードN3にログインしてからreq.session.userdataをランダムなデータに設定し、ページと彼はノードN4を押すと、別のノードからreq.session.userdataにアクセスできるようになりますか?これは、ユーザーがランダムにログアウトする可能性があることを意味します。あるいは、私はエクスプレス作業でのクラスタリングの仕組みを理解できません。

答えて

11

Connect/Expressのメモリ内セッションストアが複数のインスタンスをサポートするのに不適切であることは間違いありません。ソリューションは、バッキングデータベースを持つセッションストアを実装することです。私の推奨はconnect-redisで、サンプルコードはSession Undefined - Using Connect-Redis/ExpressJS/Node

ですが、何十ものオプションがあります。

関連する問題