上下文: 从我的 javascript Web UI 中,我启动了一个在 .NET2.0 后端执行的长时间运行(几分钟)的操作。当长时间运行的操作并行运行时,调用会立即返回操作 ID。这些操作不是 CPU 密集型的,但进行缓慢的网络调用。操作完成后,我想在 Web UI 中查看结果。
问题:工作完成后如何通知客户?
我考虑过的选项:
选项 1:我直接从 JS 异步启动长时间运行的操作,我希望返回值是最终结果而不是操作 ID。我的 AJAX 库处理一切,生活看起来非常轻松整洁。问题是在服务器端该线程是一个 ThreadPool 线程,我现在将其锁定了几分钟。即使有足够的处理能力,您也不需要太多长时间运行的并行请求导致 ThreadPool 饿死并使整个服务器瘫痪。
选项 2:有了操作 ID,如果操作完成,我开始轮询服务器。但是,这是针对我自己的服务器的拒绝服务攻击。此外,必须有公平的 ajax 解决方案。这不是一个独特的问题。
最佳答案
查看 WebSync ,.NET 的 cometd 实现。应该正是您要找的。p>
关于.net - 如何在不轮询的情况下通知我的 JS 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1333871/