2014-05-11 47 views
0

我想使用异步解决方案使用Spring MVC控制器方法中的OutputStreamWriter流式传输内容,即不阻止用于http请求的基本线程池。据我所能找到的一般是使用DefferedResult<?>作为异步。当你返回一个视图字符串名称时很好,但不能想象它能用于流的方式。找不到有用的东西。Spring 3 MVC,异步流式响应

感谢

+1

那么你可以尝试使用WebSocket方法; cliet正在监听任何事件,并且您只需完成以异步模式流式传输内容,然后就可以传递给客户端 –

回答

0

如上所述here你可以在另一个线程从而unloded HTTP线程池进行计算。 您可以尝试合并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+容器中使用它