Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Web applications 使web请求保持活动状态_Web Applications_Request_Keep Alive - Fatal编程技术网

Web applications 使web请求保持活动状态

Web applications 使web请求保持活动状态,web-applications,request,keep-alive,Web Applications,Request,Keep Alive,我有一个web应用程序,可以帮助下载报告。 但是报告生成有时需要花费很多时间,web请求通过中间代理服务器超时(超时:90秒)。 下载报告的工作流程很简单。客户端向web服务器发送请求。web服务器生成报告,并将其作为excel下载提供给客户端。 excel使用POI生成,下载使用Spring的AbstractExcelView提供。 让web请求保持活动状态(当然不增加超时)的最佳方法是什么?一种方法是让初始请求返回一个等待屏幕,上面写着“我们正在生成报告…”,包括请求令牌和JavaScrip

我有一个web应用程序,可以帮助下载报告。 但是报告生成有时需要花费很多时间,web请求通过中间代理服务器超时(超时:90秒)。 下载报告的工作流程很简单。客户端向web服务器发送请求。web服务器生成报告,并将其作为excel下载提供给客户端。
excel使用POI生成,下载使用Spring的AbstractExcelView提供。

让web请求保持活动状态(当然不增加超时)的最佳方法是什么?

一种方法是让初始请求返回一个等待屏幕,上面写着“我们正在生成报告…”,包括请求令牌和JavaScript(通常是AJAX)定期将该请求令牌传递回web应用程序,以查看报告是否完成,并在完成时显示

如果您在web应用程序代码中有任何关于报告完成程度的指示,那么也可以通过AJAX将进度反馈给您

这样,每个请求都会在相当短的时间内得到响应,但报告生成“会话”会通过令牌ID保持活动状态。当报告在服务器上完成时,您可能希望将其存储在缓存中的某个位置,直到请求为止,并在一段时间后过期,以防浏览器关闭


哦,还有一个我以前没有提到的好的副作用——用户可以看到web应用程序仍然存在,并且他们仍然有网络连接。让光标旋转几分钟可能会让人感到不安:)

您是否尝试过使用启用COMET的服务器?您可以使用各种技术(如COMET,甚至长轮询)使长时间运行的请求保持活动状态。或者对服务器进行简单的AJAX活动ping就可以了。当您知道已生成报告时,使用Ajax重新加载页面

您还可以让服务器端处理“完成了吗?”呼叫等待N秒后再放弃。如果命令完成,它将立即返回“yes,done”。如果N秒过去没有完成,它将返回“no,仍然忙”。因此,客户端必须重复轮询,但他们只需每N秒启动一个新连接,就可以毫不延迟地获得完成事件。此外,如果N足够大,则大多数客户机不必进行轮询。(如果它太大,则会与web服务器的硬超时相冲突)。这就像轮询和适当的事件通知之间的交叉。