【问题标题】:Long running ajax vs polling长时间运行的 ajax 与轮询
【发布时间】:2013-01-10 02:53:46
【问题描述】:

我正在尝试确定最适合我的 Web 应用程序的解决方案。我有一个页面会触发任意数量的 ajax 请求以从服务器检索数据。例如,加载的页面可能会向服务器发出 10 个 ajax 请求,每个请求可能需要 10 秒 (+-) 才能返回内容。

鉴于这是一个多用户和多并发环境中的 Web 应用程序,使用传统的 ajax 方法是一个好主意,还是选择长轮询,例如 SignalR。

这两种方法(Pull 与 Push)的优缺点是什么?最终,我追求的是最节省资源的方法。

谢谢

【问题讨论】:

    标签: ajax signalr long-polling


    【解决方案1】:

    在您陈述的示例中,您谈论的是纯粹的“拉动”场景。即“当页面加载时,我希望 X、Y、Z 发生,然后我想查看结果”。

    长轮询/websockets (SignalR) 对于推送场景很有用 - 即“哦,看我已经完成了这个超长进程...我最好告诉所有当前连接的用户”。

    您可以使用 SignalR 运行那些普通样式的 AJAX 请求...但您不会获得任何性能增强。 AJAX 将异步并行运行,一旦服务器端进程完成,您将执行一个回调。也许您可能会稍微提高性能,因为 signalR 将持续运行连接,因此您将失去创建连接的轻微延迟。另一方面,服务器将运行大量打开的连接,这可能会降低性能(特别是如果您使用 10 X 10 秒的计算来达到它)

    【讨论】:

    • 您的意思是打开 10x10 ajax 请求会降低服务器性能吗?那么对于这种特殊情况,SignalR 会是更好的选择吗?
    • 这是您在页面上显示的信息,对吧?对于每个加载的页面,您需要调用 10 个计算量大的调用来显示数据?在这种情况下,SignalR 并没有真正的帮助......无论如何,这 10 个调用将同时到达服务器 - 即问题似乎不是传输机制,而是调用的长时间运行。
    • 我明白了。我担心 Ajax 请求会阻塞服务器上的线程。至少使用 SignalR,我可以异步运行请求并将结果推送到页面。想法?
    • 这可能是有效的。虽然如果每个页面点击总共需要 100 秒,我认为在线程数成为问题之前服务器资源将长期耗尽。您可以使用 AsyncController 而不是 Controller 并返回 Task 而不是 ActionResult 如果您发现它实际上是问题(尽管推荐.NET 4.5)或使用 ApiController (Web Api) 并且您可以返回 Task也。在我看来,这将处理线程限制并且更容易实现。
    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 2012-02-24
    • 2013-08-08
    • 2011-04-20
    • 2012-08-16
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多