使用springMVC

时间:2015-06-05 14:09:19

标签: java spring-mvc java.util.concurrent

为了处理正在运行的过程,我们使用SpringMVC DeferredResult 将数据发送到浏览器,但在一段时间后浏览器不会返回任何数据,而过程是仍然在后端运行。它在localmachine中运行良好,但是当它部署在亚马逊EC2实例中时,我们遇到了问题。 如何解决此问题以及如何定期向浏览器发送数据。

这是我的代码,其中流程延迟了90秒

 @RequestMapping("/myDefferedResult1") 
        @ResponseBody 
        public DeferredResult<List<String>> myDefferedResult2(final HttpServletResponse httprep) {


          final DeferredResult<List<String>> deferredResult = new DeferredResult<List<String>>(null, Collections.emptyList());
            this.chatRequests.put(deferredResult, 0);

            try {
                Thread.sleep(90000L);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            deferredResult.onCompletion(new Runnable() {
                @Override
                public void run() {

                    System.out.println("completeion");
                    chatRequests.remove(deferredResult);
                }
            });

            List<String> messages = new ArrayList<String>();
            messages.add("hi");
            messages.add("hello");

            if (!messages.isEmpty()) {
                deferredResult.setResult(messages);
                System.out.println("setresult");
            }

            return deferredResult;


        } 

浏览器返回一段时间后没有收到数据

1 个答案:

答案 0 :(得分:0)

主要问题可能是在浏览器端,或者在设置超时的路上可能存在代理。在任何一种情况下,它都是由应用程序外部的配置集引起的。尝试更好地实现某种轮询/ SockJs / Websockets机制。一般来说,它更安全。