2

我正在阅读有关长轮询、彗星等的信息,并且在.Net 上工作时,我阅读了有关 SignalR 和 AspComet 的所有内容。我是彗星和类似的新手,但我不清楚使用 SignalR 或 AspComet 有什么优势,我可以简单地使用 jquery.ajax/complete:

(function poll(){
    $.ajax({ url: "server", success: function(data){
       doSomething();    
    }, dataType: "json", complete: poll, timeout: 30000 });
})();

但我显然在这里遗漏了一些东西,你能帮忙吗?

另外,从系统/服务器的角度来看,主要区别是什么?我知道使用 $.ajax 我打开了与服务器的连接并将其保持打开很长时间(具有太多同时打开的连接等的所有缺点),但我认为 SignalR 也是如此。或不?而在这方面,AspComet 说它会将线程释放回请求池。

我知道,我有点困惑,非常感谢使用 SignalR 和/或 AspComet 与 $.ajax 的优势的介绍:)

谢谢!

4

2 回答 2

2

在您的$.ajax示例中,您正在向服务器发送多个请求,并且您正在为每个客户端执行此操作。因此,您的 Web 服务器会不断受到 HTTP 请求的冲击,而其中只有少数真正发挥作用,因为客户端订阅通知的数据可能不会经常更改。只要一个 AJAX 请求完成,就会立即发送另一个 AJAX 请求。

而通过长轮询,您发送的单个请求被服务器阻止并允许它写入响应并因此通知客户端。

长轮询的优点是您限制了发送到服务器的 HTTP 请求的数量。

于 2012-02-13T08:48:33.670 回答
2

COMET 应用程序通常需要自定义服务器。IIS 保留一个专用线程来处理显然无法扩展的每个请求。IIS 中每个 CPU 有几千个线程的限制。

AspComet 通过提供服务器端解决方案来处理线程生命周期来解决这个问题(就像你写的那样,它将线程返回到池中)。AspComet 与Bayeux 协议兼容,因此您可以使用任何 Bayeux JS 客户端。

SignalR 是一种客户端/服务器解决方案,它将底层通信协议封装在异步调用中。SignalR 选择可用的最佳协议(长轮询、websockets 或其他),因此您无需担心。他们有 .NET、Silverlight、WP7、JS 等的客户端。

于 2012-02-13T20:00:49.867 回答