2011-02-16 5 views
2

IHttpAsyncHandler를 통해 .Net 비동기 프로그래밍 모델로 C#에서 비동기 http 요청 처리를 구현했습니다.C# APM/IHttpAsyncHandler에 자바 아날로그

저는 java에 익숙하지만 같은 목적을 달성하고 싶습니다. 요청을 시작하고 요청 처리 스레드 풀 스레드를 해지시키고 비동기 적으로 처리하고 모든 처리가 완료되면 신호를 보내고 처리기의 종료 요청을 트리거합니다 콜백을 수행하고 처리 결과를 응답 스트림에 씁니다.

내 자신의 솔루션을 롤업 할 필요는 없지만 비동기 http 처리를 검색하면 AJAX 중심 솔루션 (서버 측에서 비동기 처리가 필요함) 만 나타납니다.

Java에 IHttpAsyncHandler에 대한 아날로그가 있습니까?

답변

0

자바 서블릿에서 모든 요청은 자체 스레드를 가지며 다른 요청의 처리를 제한하지 않습니다. 따라서, 원칙적으로 이미 비동기 : http://www.codestyle.org/java/servlets/faq-Threads.shtml

AFAIK, 닷넷에서 IHttpAsyncHandler은 higer 성능 있어야하는데,하지만 모두가 동의 : http://geekswithblogs.net/SanjayU/archive/2009/01/06/ihttphandler-vs-ihttpasynchandler.aspx

업데이트 :

하는 다수의 병렬을 시작하려면 작업을 완료하고 모든 작업이 끝날 때까지 기다리십시오. ExecutorService를 사용하는 것이 가장 좋습니다. Servlet 메소드 안에서 다음과 같이 할 수 있습니다 :

ExecutorService executor = Executors.newCachedThreadPool(numThreads); 
    for (int i = 0; i < numParallelTasks; i++) { 
     Runnable worker = new MyRunnable(); 
     executor.execute(worker); 
    } 
    // This will make the executor accept no new threads 
    // and finish all existing threads in the queue 
    executor.shutdown(); 
    // Wait until all threads are finish 
    while (!executor.isTerminated()) { 

    } 
    // all tasks done 
+0

내 응답을 준비 할 때 여러 개의 잠재적으로 장기 실행되는 비 CPU 바운드 작업을 병렬로 실행할 수 있기를 원합니다. – rollinwiththepunches

+0

이것은 서블릿에 관한 한 잘 실행되어야합니다. 오랫동안 답장을 기다리는 사용자 일뿐입니다. UI에 영향을주지 않기를 바랍니다. 또한 일반적인 작업 시간은 얼마나 걸릴 것으로 예상됩니까? –

+0

나는 높은 프로필 전자 상거래 사이트에서 일하므로 응답을 기다리는 사용자는 옵션이 아닙니다. 가장 긴 병렬 실행 프로세스가 실행될 때까지만 응답 길이를 유지하기를 원합니다. – rollinwiththepunches

관련 문제