我正在使用 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);
-> 我的应用程序中的线程池从 MQ 接收消息并在 asyncContext 上写入数据 // 将消息转换为 JSON 字符串,然后 // 从映射中检索上下文
asyncContext.getResponse().getOutputStream().print(strMessage);
asyncContext.getResponse().getOutputStream().flush();
如果这是最后一个块或出现异常
asyncContext.complete();
现在,问题或行为是我的浏览器正在进行 GET 调用,当服务器在输出流上写入时未接收数据,而仅在服务器执行时获取
asyncContext.complete();
我希望我的浏览器在将数据写入输出流(并刷新)后立即接收数据,而不是等到 asyncContext 完成,因为它可能永远不会被调用。
寻找诸如气氛广播器或 HTML5 SSE 之类的解决方案,但仅使用 AyncContext