私はコントローラ内で@Async
タスクを実行するいくつかのメソッドを持っています。Spring MVCで@Asyncメソッドの結果を返し、それをAjaxクライアントに返します。
@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モデルに非常に近いと理解していますが、私は一般的に彗星に精通していません。
私の質問は、JavaScript/JQueryを使用してクライアント側で接続を開いたままにする方法です。
私の@RequestMapping(value="/async.do", method=RequestMethod.POST)
メソッドは結果をクライアントにプッシュしますか?
最終的にこの/パート2をどのように解決しましたか? – happybuddha