java - 如何处理持久的 http 请求

标签 java javascript spring-mvc asynchronous long-polling

我有一个持久的 http 请求(后端有大量计算)。

目前都是同步的,而服务器电脑,浏览器看不到输出/结果。一段时间后,连接断开并在浏览器中显示超时错误。

我想立即返回一些信息给浏览器,让它等待结果。如何实现?

请注意,Java 后端是同步的。因此,解决方案需要在 servlet/前端进行一些hack,可能需要 javascript 请求..?

最佳答案

您可能想要使用 COMET 模式。它类似于 AJAX 模式,仅以长时间保持的 HTTP 请求为特征来模拟提要。参见 here以获得详细的解释。

基本上,您发出一个请求,服务器保留它,然后在它有兴趣时回复。在收到回复时,您立即发出另一个长期持有的请求。

这个时间序列让它感觉像是一个提要。

在你的情况下,它可以立即返回“是的,我正在处理它”,然后回复“仍在处理 10% 完成的伙计”等等,直到你返回“完成”。

node.js 之类的东西非常擅长实现这种功能。

尽管如此,当您使用同步 Java 后端时,您可能需要在某处显示正在取得进展的某种指示。可能是一个数据库。

关于java - 如何处理持久的 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16542202/

相关文章:

JavaFX - 带有 2 个输入字段的对话框?

java - 使用 ThreadPoolExecutor,allowCoreThreadTimeOut 和零核心线程有什么区别?

java - Spring框架中 `name`注解的 `RequestMapping`属性有哪些用例?

Java 异步套接字 IO

javascript - 在 angularjs 中,我如何记录异常和堆栈跟踪,用户进入生产?

javascript - 使用回调导入模块

javascript - 键盘驱动的 Web UI

Spring:无法将模拟注入(inject)到使用 @Aspect 注释的类中

mysql - spring mysql hibernate中的外键引用

java - 如何获取存储在 ConfigAdmin 中的属性?