我有我的控制器,其執行@Async
任務在Spring MVC返回@Async方法的結果並返回給Ajax客戶
@Async
public Future<String> getResultFromServer(){
String result = ......
return new AsyncResult<String>(result);
}
方法的執行時間長達1O分鐘內的一些方法。我所需要做的只是將結果返回到將使用AJAX/JQuery連接的客戶端。
我不希望客戶端每秒要求我的服務器是否執行@Async
方法。我只想保持連接打開,然後將結果「推」到服務器。
@RequestMapping(value="/async.do", method=RequestMethod.POST)
public void getResult(HttpServletResponse res){
String result = null;
PrintWriter out = res.getWriter();
Future<String> future = getResultFromServer();
try {
if (future.isDone())
result = future.get();
out.println(result);
out.close();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
我明白,這是非常接近Comit模型,但我不熟悉彗星一般。
我的問題是如何保持連接在客戶端使用JavaScript/JQuery打開?
並將我的@RequestMapping(value="/async.do", method=RequestMethod.POST)
方法推送結果給客戶端?
你是如何最終解決這個/第2部分的? – happybuddha