2014-05-11 5 views
0

OutputStream 또는 Writer을 사용하여 Spring MVC 컨트롤러 메소드에서 비동기 솔루션을 사용하여 콘텐츠를 스트리밍하고 싶습니다. 즉, http 요청에 사용되는 기본 스레드 풀을 차단하지 않습니다. 내가 아는 한 일반적으로 비동기에 DefferedResult<?>을 사용하는 것입니다. 뷰 문자열 이름을 반환하지만 스트림에서 작동하는 방식을 생각할 수 없다면 괜찮습니다. 도움이되는 것을 찾을 수 없습니다.Spring 3 MVC, 비동기 적으로 스트림 응답

감사

+1

WebSocket 접근 방법을 사용해보십시오. cliet는 모든 이벤트를 듣고 있으며 비동기 모드로 컨텐츠를 스트리밍하기 만하면 클라이언트로 전달할 수 있습니다 –

답변

0

으로는 다른 스레드하여 unloded HTTP 스레드 풀에서 계산을 수행 할 수 here을 설명했다. DefferedResultbyte[] (DefferedResult) 반환 유형 (이전에 ByteArrayHttpMessageConverter 등록)을 결합 할 수 있습니다. 따라서 최종 방법은 다음과 같습니다.

@ResponseBody 
public DefferedResult<byte[]> foo(HttpServlet response) { 
    //set headers using response 
    response.setContentType("someContentType"); 
    ... 

    DefferedResult<byte[]> r = new DefferedResult<>(); 
    executionService.submit(() -> { 
     r.setResult(getBytes()); 
    }); 
    return r; 
} 

또 다른 옵션은 Defferedresult와 ResponseEntity를 결합하는 것입니다. Servlet 3.0+ 컨테이너에서 사용하는 것을 잊지 마십시오.