语境:从我的 javascript Web UI 中,我启动了一个在 .NET2.0 后端上执行的长时间运行(几分钟)的操作。当长时间运行的操作并行运行时,调用立即返回操作 ID。这些操作不是 CPU 密集型的,但会进行缓慢的网络调用。操作完成后,我想在 Web UI 中查看结果。

问题: 工作完成后如何通知客户?

我考虑过的选项:

选项1:我直接从 JS 异步启动长时间运行的操作,并且我希望返回值是最终结果而不是操作 ID。我的 AJAX 库负责一切,生活看起来非常轻松和整洁。问题是在服务器端 该线程是一个 ThreadPool 线程,我现在将其锁定了几分钟. 。即使有足够的处理能力,也不需要太多长时间运行的并行请求来导致线程池饥饿并使整个服务器瘫痪。

选项2:有了操作 ID,我开始轮询服务器操作是否完成。然而,这是针对我自己的服务器的拒绝服务攻击。此外,必须有公平的ajax解决方案。这不是一个独特的问题。

有帮助吗?

解决方案

查核 WebSync ,彗星实施.NET。应该是你在寻找什么。

其他提示

轮询,如果处理得当,不会对你的服务器的负载明显的效果。您应该自定义的时间间隔最好覆盖服务器作业的细节 - 例如你不轮询服务器至少2分钟,如果你知道该手术通常需要更长的时间。即使在您选择一个足够大的间隔 - 例如10秒。使用web服务请求或自定义处理程序将最大限度地减少的流量和处理该请求所需的服务器时间。

也许反向AJAX是有用的,如果你不会有太多的并发客户端。这有时被称为彗星。

反转Ajax指的是使用长寿命的HTTP连接,以使web服务器和浏览器之间的低等待时间的通信一个Ajax设计模式。基本上它是从客户端发送数据到服务器的方式,为推动服务器数据返回给浏览器(你所需要的)。

机制

http://en.wikipedia.org/wiki/Reverse_Ajax

听起来像它可能满足您的需求,我只是用它和它的工作非常出色。

关于被隐藏(或小)IFRAME运行长时间运行的脚本,使JavaScript来检查只iframe的内容是什么?例如脚本在其端部中写入ID的iframe中。

您选择2正是我所做过的事情。使用的setTimeout您的投票限制在每30秒左右。

ICEfaces框架 提供了一个 AJAX推送 技术。他们支持 可扩展的异步请求处理 在 Jetty、Tomcat 和 Glassfish 等各种应用程序服务器上。

虽然这都是 Java 的东西,但它可能有助于为 google 找到正确的搜索词。

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