2013-07-13 4 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 

} 

내 질문은 : 매번 단일 사용자가 임의의 노드 인스턴스가 명중 또는 예를 들어 처음 그가 페이지를 열고 노드 N4 안타와 그의 세션이 만료 때까지, 그는에 노드 N4 충돌 모든 요청? 내 질문을 이해하지 못한 사람들을 위해 나는 내가 걱정하는 것을 설명하려고 노력할 것입니다 : 사용자가 내 페이지를 입력하고 노드 N3에 로그인 한 다음 req.session.userdata를 임의의 데이터로 설정하고 새로 고칩니다. 페이지와 그는 노드 N4에 충돌, 다른 노드에서 req.session.userdata에 액세스 할 수 있습니까? 즉, 사용자가 무작위로 로그 아웃 할 수있는 기회가 있다는 의미입니다. 아니면 익스프레스가 작동하는 방식을 이해하지 못하고 있습니다.

답변

11

Connect/Express의 메모리 세션 저장소가 둘 이상의 인스턴스를 지원하는 데 적합하지 않습니다. 해결 방법은 백업 데이터베이스가있는 세션 저장소를 구현하는 것입니다. 내 추천은 connect-redis이고 예제 코드는 Session Undefined - Using Connect-Redis/ExpressJS/Node입니다.

하지만 수십 가지 옵션이 있습니다.

관련 문제