1

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

4

2 回答 2

2

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

如果您在 Web 应用程序代码中对报告的进度有任何指示,则也可以通过 AJAX 传达该进度。

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

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

于 2010-04-16T06:00:54.903 回答
0

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

于 2010-04-16T06:36:48.187 回答