保持Web请求活跃

时间:2010-04-16 05:56:39

标签: web-applications request keep-alive

我有一个Web应用程序,可以帮助下载报告。 但是报告生成有时需要花费很多时间,并且Web请求会通过中间代理服务器超时(超时:90秒)。 下载报告的工作流程非常简单。客户端向Web服务器发送请求。 Web服务器生成报告,并将其作为Excel下载提供给客户端 excel是使用POI生成的,下载是使用Spring的AbstractExcelView提供的 什么是保持Web请求活着的最佳方法(当然,不会增加超时)?

2 个答案:

答案 0 :(得分:2)

一种方法是让初始请求返回一个保持屏幕,说“我们正在生成报告......”,包括请求令牌和JavaScript(通常是AJAX),以便将该请求令牌定期传递回Web应用程序。查看报告是否已完成,并在报告完成后显示。

如果您在网络应用程序代码中有任何迹象表明该报告已经有多远,那么该进展也可以通过AJAX传回。

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

哦,还有一个很好的副作用,我之前没有提到过 - 用户看到网络应用 还活着,他们仍然有网络连接。让光标旋转几分钟可能会令人不安:)

答案 1 :(得分:0)

您是否尝试过使用支持COMET的服务器?您可以使用COMET等各种技术甚至长轮询来保持长时间运行的请求。或者对服务器进行简单的AJAX活动ping应该可以解决问题。当您知道已生成报告时,使用Ajax重新加载页面。