2016-06-23 3 views
0

스테이트리스 서버를 만들고 싶습니다. 따라서 서버가 다운되면로드 밸런서가 요청을 다른 서버로 리디렉션 할 수 있습니다. 하지만 세션이 하나의 서버에서 생성되면 서버를 유지하는 방법이 내려갑니다. mysqlstore를 사용하여 데이터베이스에서 세션을 유지하지만 각 서버에 대해 데이터베이스에 새로운 레코드를 생성하므로 세션 ID가 공유되지 않습니다 다른 서버. 따라서 서버에 상태를 저장하는 메커니즘이 필요합니다.nodejs에서 서버를 통해 세션을 공유하는 방법은 무엇입니까?

+1

기본적으로 상태 비 저장 응용 프로그램은 세션을 유지 관리하지 않습니다. 세션은 상태입니다. 올바른 질문을 하시겠습니까? – Paul

+0

서버가 다운되면 리디렉션에 대해 걱정할 필요가 없습니다. AWS ELB는 자동으로 유해한 상태로 표시하고로드 밸런서에 연결된 다른 상태 서버로 트래픽을 전송합니다. – error2007s

+0

애플리케이션 제어 세션 스틱을 사용하십시오. http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-sticky-sessions.html#enable-sticky-sessions-application – error2007s

답변

1

다른 의미가 없으므로 express-session을 사용하고있는 것으로 추측됩니다.

당신은 mysqlstore를 올바르게 사용하고 있습니다. 노드의 단일 스레드 문제를 해결하는 방법은 express-session을 빼고 대신 세션 데이터를 암호화하여 클라이언트 쿠키에 저장하는 것입니다. 그런 다음 GET 요청에 대한 세션 데이터의 암호를 해독하고 쿠키의 분리 키를 사용하여 데이터베이스에서 유효성을 검사 할 수 있습니다 (존재하지 않으면 새로운 세션/쿠키 쌍을 만들 수 있음).

가장 많이 사용되는 Node.js 미들웨어는 cookie-session.입니다. 거기에는 훌륭한 설명서가 있습니다. 여러 서버와 지금은 꽤 확장 가능한 장소에있는 것 같습니다 있기 때문에 보조 노트로

https://github.com/expressjs/cookie-session

, 그것은 express-session을 어쨌든 죽겠다 가치가있다. express-session은 메모리 누수와 관련하여 알려진 문제가있는 MemoryStore를 사용합니다. 소규모 프로젝트에 사용하기에는 괜찮지 만 더 큰 프로젝트의 경우 다시 고려해야합니다.

관련 문제