Nodejs群集和表达会话

时间:2013-07-13 02:01:08

标签: node.js express multiprocessing cluster-computing

我正在尝试构建nodejs应用程序,它将利用多核机器(a.k.a。集群),我得到了一个关于会话的问题。我的代码如下所示:

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

}

我的问题是:每当一个用户点击随机节点实例时,或者例如他第一次打开页面并点击节点N4并且直到他的会话到期,他会在每次请求时命中节点N4?对于那些不理解我的问题的人,我会试着解释一下我担心的问题: 用户进入我的页面,他在节点N3上登录,然后我将req.session.userdata设置为随机数据,他刷新页面并点击Node N4,我是否能够从不同的节点访问req.session.userdata?这意味着用户有机会随机退出,或者我只是不了解如何使用快递进行聚类?

1 个答案:

答案 0 :(得分:12)

您确定Connect / Express中的内存会话存储不适合支持多个实例。解决方案是使用后备数据库实现会话存储。我的建议是connect-redis,示例代码位于Session Undefined - Using Connect-Redis / ExpressJS / Node

但是有很多选择。