У меня есть метод внутри моего контроллера, который выполняет @Async
задачу
@Async
public Future<String> getResultFromServer(){
String result = ......
return new AsyncResult<String>(result);
}
Время выполнения метода достигает 1о минут. Все, что мне нужно сделать, это просто вернуть результат на сторону клиента, который будет подключен с помощью 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, но я не знаком с comet в целом.
Мой вопрос в том, как я могу держать соединение открытым на стороне клиента, используя JavaScript/JQuery?
и будет ли мой @RequestMapping(value="/async.do", method=RequestMethod.POST)
метод выталкивать результат на клиента?