2012-09-05 3 views
1

나는 해결해야 할 흥미로운 문제가 있으며 어디서부터 시작해야하는지 전혀 모른다. 양식을 통해 레코드 목록을 가져와 각각에 대해 ajax 호출을 수행하는 MVC 웹 응용 프로그램을 작성 중입니다. ajax 호출이 발생하는 컨트롤러는 한 번에 하나의 요청 만 처리 할 수있는 리소스를 사용합니다. 그러나 간단한 해결책은 ajax 호출을 동기식으로 변경하여 브라우저를 정지시키고 경험이 떨어지는 경우입니다.큐 요청 MVC 컨트롤러

또한 여러 사용자가 동시에이 응용 프로그램을 사용하여 클라이언트 측의 대기열이 작동하지 않을 수도 있습니다.

누구든지 의견이 있으십니까?

마이크

+1

컨트롤러를 비동기로 변경 하시겠습니까? –

+0

나는 그렇지 않다. 비동기 컨트롤러가 도움이되지 않는다는 것을 이해합니다. 그렇지 않은가요? – mcottingham

+0

여기에 정의 된 리소스에 의존한다고 가정합니다. '한 번에 하나의 요청 만 처리 할 수있는 리소스를 사용합니다.' 한 번에 하나씩 만 처리 할 수있는 리소스 또는 리소스 유형을 조금 더 밝힐 수 있습니까? –

답변

0

먼저 내 요구 사항은 귀하의 것과 다릅니다. 내 문제는 백엔드 데이터베이스가 약간 느려지는 경향이 있었고 사용자의 응답 성은 매우 중요했습니다.

따라서 데이터베이스 상호 작용을 방정식에서 제거해야했습니다.

내 솔루션은 두 부분이 있습니다

  1. 데이터의 서버 측 캐시를 유지를

  2. 서버

과 상호 작용할 수있는 모든 데이터베이스 작업을 포함하는 별도의 프로세스를 만듭니다

별도의 프로세스는 Windows 서비스에서 호스팅하는 명명 된 파이프 WCF 서비스로 구현되었습니다.

기본 프로세스의 개요는 다음과 같습니다

  1. 사용자가 "저장"을 클릭, 아약스는 MVC 컨트롤러 컨트롤러는 캐시 데이터를 업데이트
  2. 에 양식을 게시 한 후 WCF 파이프
  3. 서비스를 호출 데이터를 동시 대기열 (세션 ID와 함께)로 푸시하고 guid 토큰을 반환합니다.
  4. 컨트롤러가 토큰을 JSON 응답으로 반환합니다.
  5. jQuery Ajax 처리기는 응답을 가로 채고 "저장된"양식을 나타내는 UI 요소에 토큰을 저장합니다.

서비스 자체는 다음과 같이 작동 시작에

  1. 는 타이머를 만들 수 있습니다.
  2. 타이머 틱 :
  3. 타이머를 중지하십시오.
  4. 가 "완료"에 상품을 추가 작업 프로세서
  5. 에 의해 처리 될 보내기 동시 큐
  6. 에서 각 항목을 모두 대기중인 작업 항목을 제거 또는 "오류가 있습니다"동시 사전은, 이전에 의해 키가 세션 ID (부실 데이터를 제거하는 데 필요한 시간을 유지해야 함) 여기에는 원래 작업 토큰이 포함됩니다.
  7. 타이머를 다시 시작하십시오.돌아 가기 사용자 땅에서

는 자바 스크립트 setInterval을 루프 실행이 :

  1. 서버에 Ajax 요청 (하트 비트 컨트롤러)
  2. 컨트롤러가 서비스에 연결하고 현재 세션 ID를 전달
  3. 이 서비스는
  4. 컨트롤러는 JSON 객체 배열과 같은 목록을 반환하는 "완료"와 "오류"사전에서 모든 항목을 반환
  5. javascript는 반환 된 목록을 반복하고 적절한 UI 업데이트를 수행하기 위해 토큰을 사용합니다.

최종 결과는 느린 백엔드 지속성 서버에도 불구하고 매우 반응적인 UI입니다.

구현 코드의 특정 부분을 원하면 알려주십시오.

+0

고마워요! 이것은 확실히 도움이됩니다. 나는 내가 듣고있는 것이이 웹 응용 프로그램 내에서해야 할 일이 아니라는 것입니다. 큐잉과 실행을 수행하는 외부 서비스가 필요합니다. – mcottingham