繁体   English   中英

如何使用服务器端任务的进度更新网页?

[英]How do I update a webpage with the progress of a server-side task?

我正在开发一个Web项目,该项目从调查类型应用程序中获取结果,并通过一系列计算运行它们,为用户提出一些建议的建议。

现在,这个计算可能需要一分钟左右,所以我希望能够给用户一些关于它进展的更新。 显然,快速而肮脏的解决方案是在旋转齿轮类型图形的基础上提出“请等待我们计算您的建议”的信息。 (或者其他什么,你明白了......)。 任务完成后,我将重定向到结果页面。

但是,我想做一些更华丽的事情。 也许是一个进度条的东西,甚至提示用户在后台发生了什么。 例如,给他们一个进度条,一些文字说“现在处理建议3的15;多维生素”

关于如何设置它的任何建议? 我想要做的一种方法是将计算方法的进度写入HttpContext,然后提出一个更新面板和计时器来显示/刷新此信息。 我还检查了可能构建一个Web服务/方法,然后在某个时间间隔进行轮询。

以前有人做过类似的事吗? 什么对你有用?

再次感谢!

〜吉姆

如果您从未去过AjaxPatterns.org,那么我建议您按顺序访问。 您要寻找的相关阅读材料是:

进度指标

这包括几个模式来实现目标以及你已经建议的两个。 如果你想要实际的进度指示,那么你将不得不做一些工作,但基本模式如下:

  1. 启动长时间运行的任务(可能在一个单独的线程上)
  2. 创建指示已完成工作的共享资源,以及可以检索该信息的唯一键。 这可以在内存,数据库,文件系统中完成......
  3. 将该密钥传递回客户端
  4. 在客户端,使用该密钥以某个间隔轮询进度更新
  5. 使用基于返回值的进度指示器更新客户端显示。

您对使用HttpContext的建议最终是大多数人做这类事情的方式。 有很多方法可以赞美它,但这确实是正在发生的事情。

一种这样的方法是你用某种单独的(或者某种东西)注册这些并行线程中的每一个并定期(每10秒?)让你的AJAX调用ping该线程,询问它是如何进行的,它可以返回一个完整的百分比供您展示给您的用户。 但是,在幕后,它只是一个AJAX调用。 您甚至可以根据您向其他线程提出的问题得出的一些回复来改变支票的频率。

我过去曾经和噱头相似。 它们最初通常都可以,但是后端必须开始报告更多正在发生的事情,因此客户端可以将其显示给可能会或可能不会关心它的用户。

我们过去做过的一件事就是简单地在页面(或进度条等)上放置一个倒数计时器,以及一些旋转文本, 说明我们将如何处理数据,ala安装程序。 它不一定特定于正在发生的事情,而是它的一般情况,我们可以定期在服务器端更新它。

如果你想进入你的初始路线,我会建议将你的分析任务分成流程,并根据流程的进度更新一个集合,然后当客户端回调(通过ajax,或刷新,或魔术)你只需要给他们返回状态集合,为每个状态提供一个UID,客户端可以确定是否需要更新,这样,如果它们在调用之间发生,您可以看到许多状态更改,并且您最大限度地减少了进行“处理”所需的工作“报告其状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM