保持网络请求有效

发布于 2024-08-28 22:58:42 字数 224 浏览 6 评论 0原文

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

I have a web application , that helps download reports.
But the report generation sometimes takes a lot of time, and the web request times out through the intermediate proxy server.(Timeout :90 secs).
The workflow for downloading the report is straightforward. Client sends request to the web server. The web server generates the report , and makes it available to the client as an excel download.
The excel is generated using POI and the download is provided using Spring's AbstractExcelView.
What could be the best way to keep the web request alive(without increasing the timeout , of course) ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烟酉 2024-09-04 22:58:42

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

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

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

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

One way is to make the initial request return a holding screen saying, "We're generating the report..." including a request token and JavaScript (typically AJAX) to pass that request token back to the web application periodically to see if the report is done, and display it when it is.

If you have any indication within the web app code of how far the report has got, that progress can be communicated back through the AJAX too.

That way each request is answered in a reasonably short period, but the report generation "session" is kept alive by the token ID. When the report is finished on the server you'd probably want to store it in a cache somewhere until it's requested - and expire it after a while, in case the browser has been closed.

Oh, and a nice side effect I didn't mention before - the user gets to see that the web app is still alive, and they've still got a network connection to it. Leaving a cursor spinning for a couple of minutes can be unnerving :)

丢了幸福的猪 2024-09-04 22:58:42

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

Have you tried using a COMET enabled server ? You can keep a long running request alive by using a variety of techniques like COMET or even long polling. Or a simple AJAX alive ping to the server should do the trick. Reload the page using Ajax when you know that the report has been generated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文