我正在开发一个Web应用程序,它将任务提交给主/工作系统,该系统将任务分配给一系列工作程序实例中的任何一个.工作队列主服务器作为单独的进程运行(在一台单独的机器上),任务通过HTTP / REST请求提交给主服务器.将任务提交到工作队列后,客户端应用程序可以提交另一个HTTP请求以获取有关任务的状态信息.
对于我的Web应用程序,我希望它提供某种进度条视图,为用户提供有关任务处理进度的指示.实现这一点的显而易见的方法是使用AJAX进度计小部件,该小部件定期轮询工作队列以获取已提交任务的状态.我的问题是,如果没有频繁的民意调查,有没有更好的方法来实现这一目标?
我已经考虑过让客户端Web应用程序打开一个服务器套接字,它可以监听来自工作主机的通知.我的另一个类似想法是使用XMPP或类似的协议进行状态通知. (当然,主/工作系统需要更新以提供通知,但我拥有代码,因此可以自己进行任何必要的更新.)
我想这取决于几个因素
原文链接:https://www.f2er.com/ajax/160006.html>反馈的准确程度如何(1%,5%,50%)准确的反馈使得值得追求某种进度条和彗星式推进.如果你只能说“忙……坚持……差不多……完成”然后一个简单的ajax“我们还在那里”民意调查肯定更容易编码.
>客户端必须及时查看完成消息
>每项任务需要多长时间(1秒,10秒,10分钟)
1秒使它有点没有实际意义. 10秒让它值得. 10分钟意味着你最好建议用户去喝咖啡休息时间:-)
>将有多少并发请求
除非你有一个“特殊”的服务器,实时推送式系统往往会吃掉连接,你很快就会被淘汰出局.不得不为更好的进度条投入更多网络服务器可能会损害预算.
我在871184上有一些示例代码,显示手动滚动“forever frame”,这看起来效果很好.我开发的项目虽然没有那么严重,但操作需要几秒钟,我们可以提供相当准确的百分比.代码使用asp.net和jquery,但一般技术将适用于任何服务器和javascript框架.
编辑如John所述,状态报告可能不是RESTful服务的工作.但没有任何内容表明你无法在客户端上打开iframe,该iframe挂钩到轮询服务的服务器上的页面. Theory说服务器和服务至少会彼此接近:-)