2010-03-16 52 views
3

我正在从一个调查类型应用程序获取结果的Web项目中工作,并通过一系列计算运行它们以为用户提供一些建议的建议。如何使用服务器端任务的进度更新网页?

现在,这种计算可能需要一分钟左右的时间,所以我希望能够给用户在其上的一些进展更新。显然,这种快速和肮脏的解决方案应该是沿着“请等待,而我们计算您的建议”的线条上贴上旋转齿轮类型的图形。 (或者别的,你明白了......)。一旦任务完成,我会重定向到结果页面。

不过,我想多了几分浮华做一些事情。也许是沿着进度条的行,甚至提示用户在后台发生了什么。例如,给他们一个进度条,有一些文字,上面写着“现在处理的15建议3;多维生素”

我如何可以设置这件事有什么建议?我正在考虑的一种方法是将计算方法的进度写入HttpContext,并打上更新面板和计时器,以显示/刷新此信息。我也检出了构建一个Web服务/方法,然后在一段时间内进行轮询。

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

谢谢!

〜吉姆

回答

1

如果你从来没有到过AjaxPatterns.org,那么我会建议访问是为了。你要寻找相关的阅读材料是:

Progress Indicator

以上涵盖多个模式与您已经建议两人相处完成目标。如果你想实际进度指示,那么你将不得不做的工作还是比较可观的,但基本的模式如下:

  1. 开球长时间运行的任务(可能在一个单独的线程)
  2. 创建一个指示完成工作的共享资源,以及一个可以检索该信息的唯一键。这可以在内存,数据库,文件系统来完成...
  3. 使用该密钥
  4. 更新客户端显示传递键返回到客户端
  5. 在客户端,在调查的最新进展有些间隔基于值 返回进度指示器。
0

你的建议有关使用HttpContext的是什么,最终大多数人怎么做这样的事情。有很多方法可以将它美化,但这确实是发生了什么。

一个这样的方式是,你在某种单(或东西),并定期的每个并行线程的寄存器(每10秒?)有你的AJAX调用线程问它怎么回事这可能会返回一个完整的比例给你展示给你的用户。但是,在幕后,它只是一个AJAX调用。你甚至可以改变你的支票的频率,这取决于你询问你的其他线索时发生的一些反应。

0

我曾经在类似于过去的噱头。它们通常都是最初确定的,但后端必须开始报告更多的事情,只是让客户端可以将其显示给可能会或可能不关心它的用户。

一件事我们在过去做的是简单地把一个倒计时页面(或进度条等),并说:什么我们将与数据,ALA安装程序做一些旋转的文字上。它不一定特定于正在发生的事情,但它的一般性,我们可以定期在服务器端进行更新。

如果你想要去您最初的路线我建议将你的分析任务到流程和与过程的最新进展情况的集合,然后当客户端回调中(通过AJAX,或刷新,或者魔法)您只需将状态收集起来,给每个状态一个UID,然后客户端就可以确定是否需要更新,这样,如果在呼叫之间发生状态更改,您可以看到许多状态更改,并且最大限度地减少了您需要执行的工作使“过程”报告其状态。