2010-07-23 4 views
6

명확한 답변을 찾을 수 없습니다. 클라이언트 세션이 ASP.NET MVC2 응용 프로그램에 설정되면 스레드 풀의 특정 스레드가 해당 요청을 처리한다고 가정합니다. 동일한 스레드가 항상 해당 세션에 대한 모든 후속 요청을 처리합니까? 그래서 이론적으로 세션 ID가 엉망이되어 잘못된 스레드가 선택되면 세션 레벨 데이터가 누락 될 수 있습니까? 감사합니다.세션 및 스레드

+0

스레딩 방식으로 인해 세션 ID가 엉망이되는 이유가 확실하지 않습니다. 당신의 생각을 좀 더 설명 할 수 있습니까? –

답변

2

아니요. 각 요청은 다른 스레드에서 처리 할 수 ​​있습니다. 즉, 페이지의 다양한 리소스를 다른 스레드에서 처리 할 수 ​​있습니다. 또는 그것들은 같은 것으로 취급 될 수 있습니다. 작업자 프로세스와 iis는 새 스레드를 만드는 것이 가치가 있는지 또는 사용할 수있을 때까지 기다리는 것이 더 나은지 여부를 결정합니다.

페이지가 하나의 스레드에 의해 렌더링 된 다음 이미지, 스타일 시트 및 자바 스크립트가 동일하거나 다른 스레드에서 처리 될 수 있습니다. 이것은 일반적으로 ASP.NET 및 웹 프로그래밍의 상태 비 저장 속성의 기본입니다. 그래도 할 수있는 일은 서로 다른 서버 또는 다른 도메인에 대한 모든 요청의로드 균형을 조정하는 것입니다.

이렇게하면 세션 상태에 대한 질문이 표시됩니다. 요청간에 세션 ID를 잃어서는 안됩니다. 당신이 있다면, 심각한 심각한 문제가 있습니다. 또는 한 요청이 한 서버로 가고 다음 서버가 다른 종류의 부하 분산을 통해 다른 서버로 라우팅되는 웹 팜/클러스터 상황에있을 수 있습니다.

로드 균형 조정 시나리오에서는 세션 상태를 유지할 수있는 방법이 필요합니다. 가장 일반적인 두 가지 접근 방법은 데이터베이스와 분산 캐시에 저장하는 것입니다. 나중에 세션 데이터가 매우 자연스럽게 임시적인 것이며 영구적 인 db에 속하지 않기 때문에 필자가 선호하는 방식입니다. 한마디로

3

, 아니, 아래의 IIS (I 비주얼 스튜디오의 "카시니"웹 개발 서버에 대한 신뢰도를 보장 할 수 없습니다,하지만 난 너무 거기에 의심)

당신은 다음을 추가하여 변경 스레드를 보여줄 수 보기에 :

<%= System.Threading.Thread.CurrentThread.ManagedThreadId %> 

지금 반복적으로 브라우저에서 페이지를 히트 (또는 어쩌면 2 개 또는 3 브라우저에서 충돌) 그리고 당신이 수시로 변경 볼 수 있습니다.

이와 같은 간단한 시나리오에서 종종은 ASP.NET이 필요 이상으로 스레드를 생성 할 가치가 없으므로 요청을 처리하는 동일한 스레드를보고 있지만 일단 서버로드를 시작하면 , 당신은 여러 스레드를 볼 수 있습니다.