クライアント要求を非同期に処理するために AsyncContext を使用しています。私のサーバー側のコードでは、このようなことをしています。
-> Controller クラスでは、AsyncContext を取得して格納しています。
@RequestMapping(method = RequestMethod.GET, value = "/xyz/")
public void getXyz(HttpServletRequest request, HttpServletResponse response) {
final AsyncContext asyncContext = request.startAsync(request, response);
map.put("xyz", asyncContext);
-> アプリケーション内の threadPool が MQ からメッセージを受信し、asyncContext にデータを書き込みます // メッセージを JSON 文字列に変換し、 // マップからコンテキストを取得します
asyncContext.getResponse().getOutputStream().print(strMessage);
asyncContext.getResponse().getOutputStream().flush();
これが最後のチャンクであるか、例外の場合
asyncContext.complete();
さて、問題または動作は、GET呼び出しを行っているブラウザであり、サーバーが出力ストリームに書き込んでいるときにデータを受信せず、サーバーが実行されているときにのみ取得します
asyncContext.complete();
出力ストリームに書き込まれる (およびフラッシュされる) とすぐにブラウザーにデータを受信させ、asyncContext が完了するまで待たないようにします。
大気ブロードキャスターや HTML5 SSE などのソリューションを探していますが、AyncContext のみを使用しています