Node.js集群和Express.js会话

18

我正在尝试构建一个 Node.js 应用程序,可以利用多核机器(也就是群集)。我有一个关于会话的问题。我的代码看起来像这样:

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为随机数据,他刷新页面并请求节点N4,我能够从不同的节点访问req.session.userdata吗?这意味着用户有可能被随机登出,还是我没有理解如何使用Express进行集群?
1个回答

14

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

但是,有数十种选择。


1
我只有一个问题,你应该把初始化和设置sessionstore放在循环的主部分还是工作器情况下,即else情况下? - codefreaK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接