为了处理正在运行的过程,我们使用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;
}
浏览器返回一段时间后没有收到数据
答案 0 :(得分:0)
主要问题可能是在浏览器端,或者在设置超时的路上可能存在代理。在任何一种情况下,它都是由应用程序外部的配置集引起的。尝试更好地实现某种轮询/ SockJs / Websockets机制。一般来说,它更安全。