Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理持久的http请求_Java_Javascript_Spring Mvc_Asynchronous_Long Polling - Fatal编程技术网

Java 如何处理持久的http请求

Java 如何处理持久的http请求,java,javascript,spring-mvc,asynchronous,long-polling,Java,Javascript,Spring Mvc,Asynchronous,Long Polling,我有一个持久的http请求(后端的计算量很大) 目前它是同步的,而服务器计算机、浏览器看不到输出/结果。一段时间后,连接将断开,浏览器中将显示超时错误 我想立即将一些信息返回浏览器,并让它等待结果。如何做到这一点 请注意,Java后端是同步的。因此,解决方案需要对servlet/前端进行一些黑客攻击,可能需要javascript请求 最好的解决方案是使用AJAX请求。一旦ajax请求超时,您可以使用JavaScript再次发送它(您可以显示一些按钮)。这可能是处理超时的最佳实践。您可能希望使用C

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

目前它是同步的,而服务器计算机、浏览器看不到输出/结果。一段时间后,连接将断开,浏览器中将显示超时错误

我想立即将一些信息返回浏览器,并让它等待结果。如何做到这一点


请注意,Java后端是同步的。因此,解决方案需要对servlet/前端进行一些黑客攻击,可能需要javascript请求

最好的解决方案是使用AJAX请求。一旦ajax请求超时,您可以使用JavaScript再次发送它(您可以显示一些按钮)。这可能是处理超时的最佳实践。

您可能希望使用COMET模式。这与AJAX模式类似,只是以长时间持有的HTTP请求来模拟提要。有关详细说明,请参阅

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

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

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

像node.js这样的东西非常擅长实现这种功能


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

只要您向输出流写入内容,超时就不会发生(它甚至可以是空格,不要忘记调用
flush()

例如,当您打印一份大型报告时,这种持久的请求就显得非常重要,该报告在生成后会显示给用户


在所有其他情况下,将等待页面返回给用户,并使用定期AJAX请求询问处理是否已完成。当没有任何变化且浏览器显示正在加载时,这不是一种良好的用户体验。

第一个请求必须是同步调用(我发送了一个html表单)。@RoaySpol您可以随时等待AJAX请求完成