문제

문맥:JavaScript Web UI에서 .NET2.0 백엔드에서 수행되는 장기 실행 (몇 분) 작업을 시작합니다. 통화는 Operation ID로 즉시 반환되는 동안 장기 실행 작업은 병렬로 실행됩니다. 운영은 CPU 집약적이지 않지만 느린 네트워크 통화를 수행합니다. 작업이 완료되면 웹 UI의 결과를보고 싶습니다.

의문: 작업이 완료되면 클라이언트에게 어떻게 알릴 수 있습니까?

내가 고려한 옵션 :

옵션 1: JS에서 직접 비동기로 장기 작업을 시작하고 반환 값이 조작 ID 대신 endresult가 될 것으로 예상합니다. 내 Ajax 도서관은 모든 것을 돌보고 인생은 매우 쉽고 깔끔하게 보입니다. 문제는 서버 측에서 있다는 것입니다 스레드는 이제 몇 분 동안 잠그는 스레드 풀 스레드입니다.. 충분한 처리 전력이 있어도 Threadpool이 굶어 죽고 전체 서버를 무릎으로 가져 오기 위해 너무 오래 지속되는 병렬 요청이 필요하지 않습니다.

옵션 2: 작동 ID를 사용하면 작업이 완료되면 서버를 설비하기 시작합니다. 그러나 이것은 내 자신의 서버에 대한 서비스 거부 공격입니다. 또한 공정한 Ajax 솔루션이 있어야합니다. 이것은 독특한 문제가 아닙니다.

도움이 되었습니까?

해결책

체크 아웃 WEBSYNC, .NET에 대한 혜성 구현. 정확히 당신이 찾고있는 것이어야합니다.

다른 팁

폴링은 제대로 수행하면 서버로드에 눈에 띄는 영향을 미치지 않습니다. 서버 작업의 세부 사항을 가장 잘 다루기 위해 간격을 사용자 정의해야합니다. 예를 들어 작업이 일반적으로 더 오래 걸린다는 것을 알면 서버를 2 분 이상 폴링하지 않습니다. 그 후에도 충분한 간격을 선택합니다 -10 초. 웹 서비스 요청 또는 사용자 정의 핸들러를 사용하면 트래픽과 요청을 처리하는 데 필요한 서버 시간이 최소화됩니다.

아마도 동시 클라이언트가 너무 많지 않으면 역 Ajax가 유용 할 것입니다. 이것은 때때로 혜성이라고 불립니다.

Reverse AJAX는 오랜 수명 HTTP 연결을 사용하여 웹 서버와 브라우저간에 저도 통신을 가능하게하는 AJAX 설계 패턴을 나타냅니다. 기본적으로 클라이언트에서 서버로 데이터를 전송하는 방법과 서버 데이터를 브라우저로 다시 푸시하는 메커니즘입니다 (필요한 것).

http://en.wikipedia.org/wiki/reverse_ajax

그것이 당신의 요구에 맞는 것처럼 들립니다. 나는 방금 사용했고 정말 잘 작동했습니다.

숨겨진 (또는 작은) iframe은 장기 실행 스크립트를 실행하고 iframe의 내용 만 확인하기 위해 JavaScript를 만드는 것은 어떻습니까? 예를 들어 스크립트는 결국 iframe에 ID를 씁니다.

당신의 옵션 2는 내가 전에 한 일입니다. Settimeout을 사용하여 여론 조사를 30 초마다 제한하십시오.

그만큼 빙상 프레임 워크 제공합니다 Ajax 푸시 기술. 그들은 지원합니다 확장 가능한 비동기 요청 처리 Jetty, Tomcat 및 Glassfish와 같은 다양한 응용 프로그램 서버에서.

이것은 모두 Java의 것이지만 Google에 대한 올바른 검색어를 찾는 데 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top