La méthode Return @Async entraîne Spring MVC et la renvoie au client Ajax

J'ai une méthode dans mon contrôleur qui exécute la tâche @Async

 @Async public Future<String> getResultFromServer(){ String result = ...... return new AsyncResult<String>(result); } 

Le temps d'exécution de la méthode est de 1 à 5 minutes. Tout ce que je dois faire, c'est simplement renvoyer le résultat au côté du client qui sera connecté à l'aide d'AJAX / JQuery.

Je ne souhaite pas que le client demande à mon serveur chaque seconde si la méthode @Async exécutée ou non. Je veux simplement garder ma connexion ouverte, puis simplement "pousser" le résultat sur Serveur.

 @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(); } } 

Je comprends que ce modèle est très proche de Comit, mais je ne connais pas la comète en général.

Ma question est de savoir comment puis-je garder la connexion ouverte sur le client en utilisant JavaScript / JQuery?

Et ma @RequestMapping(value="/async.do", method=RequestMethod.POST) appuiera le résultat vers le client?

Le moyen le plus simple serait de ne pas invoquer la méthode d'une manière asynchrone, plutôt que de l'invoquer directement à partir du contrôleur de manière synchrone.

Ensuite, la demande devra "attendre" jusqu'à ce que le résultat de la méthode soit calculé et qu'il puisse être retourné dès qu'il est créé.

Bien sûr, cela signifie que la connexion sera ouverte pour combien de temps dure le travail (1 minute).