我工作的一个网络应用程序提交了任务主/工作人员系统,农场的任务的任何一个系列的工作人员的实例。工作队主运行作为一个单独的进程(在一个单独的机器完全)和任务提交主通过HTTP/其余请求。一次任务都是提交给工作队,客户应用程序可以提出的另一个HTTP请求获得地位的信息有关的任务。

我的网页应用程序,我想它来提供某种形式的进展吧看法,即使用户的某些指示的任务的处理已经到来。显而易见的方式来实施这将是一个AJAX展计的部件,定期民意调查工作队对状况的任务已经提交。我的问题是,是否有更好的方式完成这没有频繁的投票?

我一直认为具有客户端网络应用程序开启了一个服务器插座上,它可以监听通知从工作主。另一个类似的以为我已经是使用。或类似的议定书状况的通知。(当然,主/工作人员的系统将需要更新,以提供通知的方式,但我有自己的代码,因此可以作出任何必要的更新自己。)

任何想法的最佳方式设置了一个通知系统,这样吗?是额外的努力的参与值得的,或是简单的投票解决方案的路要走呢?

有帮助吗?

解决方案

我想这取决于几个因素

  • 如何准确的反馈可以(1%,5%,50%)
    准确的反馈,使得它值得追求某种进展的条和彗星风格的推动。如果你只能说"繁忙的...坚持住...几乎没有...完成"然后一个简单的ajax"我们有没有"民意调查是肯定更容易代码。
  • 如何及时完成消息已经可以看出通过的客户
  • 如何长各任务的需要(1第二,10秒钟,10分钟)
    1第二,使得这一点没有实际意义。10秒让它值得的。10分钟意味着你更好,这表明用户咖啡休息:-)
  • 许多并发请求的会有
    除非你已经有了一个"特别"服务器,推动式系统倾向于吃的连接,你将竭尽全力很快。具有投入更多的网络服务器在一个花哨的进度条会受伤的预算。

我已经有了一些样品上的代码 871184 这显示了一种手滚"永远框架"这似乎工作。该项目开发,是不是敲定所有的努力虽然,该行动需要几秒钟我们可以得到相当准确的百分比。代码使用asp.net 九,但一般技术将工作与任何服务器和javascript框架。

编辑 作为 约翰 所指出的,状况报告可能不是工作的宁静的服务。但有什么不说你可以打开一个框架在客户挂钩的一页的服务器上查询服务。理论上说,该服务器和服务将至少能更接近于另一个:-)

其他提示

投票

客户保持询服务器获取状态的反应。

优点

  • 真的宁静意味着缓和规模可变的。

  • 不是最好的响应能力,如果你不想要调查你的服务器太多。

持久连接

服务器没有靠近它的HTTP连接与客户直到的反应是完整的。服务器可以发送的中间状态通过该连接使用HTTP上传.

彗星 最着名的框架来实施这种行为。

优点

  • 最好的响应速度,几乎以实时的通知,从服务器。

  • 连接的限制是限制上网服务器,保持一个连接打开太长时间可能,在最好的加载服务器,在最坏的打开服务器拒绝服务攻击。

客户服务器

让服务器后状态的更新和响应的客户,如果它是另一个宁静的应用程序。

优点

  • 最好的每一个世界,没有资源被浪费在等待的反应,无论是在服务器上或者在客户端。

  • 你需要一个全HTTP服务器和网络应用程序堆客户
  • 防火墙和路由器与他们的默认"没有进入的连接,在所有"会得到的方式。

随编辑,以增加你的想法或一种新的方法!

我的意见是坚持与对投票的解决方案,但是你可能有兴趣在这个维基百科上的文章 HTTP推 技术。

其余取决于HTTP,这是一个请求/回应的协议。我不认为你会得到一个纯粹HTTP服务器呼叫客户背状态。

此外,状况报告不是工作的服务。这是给客户的决定时,或者如果它希望的状态报告。

看看 彗星.你使一个单一的请求到服务器和服务器块和持有的连接打开,直到的最新状况的发生。一旦发生这种情况的响应发送和承诺。浏览器接收到这的响应,处理并立即重新请求相同的网址。其效果是,事件的被推向浏览器。有利弊以及它可能不适用于所有情况下使用但将提供最及时的状况的更新。

你也可以使用自清新的框架,但阿贾克斯呼吁要好得多。我不认为有任何其他方式。

PS:如果你想打开一个插座的客户,这不会改变很多-PHP浏览器会显示的网页仍然作为"装载",这是不是很用户友好。(假设你会推动或冲缓冲区拥有其他事情之前显示)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top