长期和定期轮询有什么区别?

时间:2014-04-21 18:52:53

标签: jquery ajax

在这里,每30秒,我进行AJAX调用更新我的数据库。

setInterval(function(){
    $.ajax({ url: "server", success: function(data){
        //Update your dashboard gauge
        salesGauge.setValue(data.value);
    }, dataType: "json"});
}, 30000);

另一个问题 - 如果服务器需要超过30秒的响应时间会有什么缺点?当呼叫#1正在更新时,呼叫将发送另一个请求 - 将数据库更新为最新值。

长轮询

(function poll(){
    $.ajax({ url: "server", success: function(data){
        //Update your dashboard gauge
        salesGauge.setValue(data.value);

    }, dataType: "json", complete: poll, timeout: 30000 });
})();

发送AJAX呼叫,每30秒调用一次,一旦呼叫完成,它再次调用自身。虽然它看起来更加同步,但是如果我们发送一个电话,结束30秒(当我等待第一个电话回来时)怎么办?

现在我们在第一个问题中遇到了同样的“问题”。语音标记中的问题,因为我在等待前一个响应时发送AJAX请求时没有发现问题。

谢谢!如果这个问题不明确,请告诉我。

1 个答案:

答案 0 :(得分:1)

主要问题:

setInterval(function(){
    $.ajax({ url: "server", success: function(data){
        //Update your dashboard gauge
        salesGauge.setValue(data.value);
    }, dataType: "json"});
}, 30000);

您是否未在AJAX请求本身上设置超时。这使得它未定义,因此您可以建立五个请求,所有等待服务器的响应每30秒添加另一个。这并不理想,因为:

  • 如果服务器的响应时间超过30秒,您可以通过启动更多请求来添加加载。在小型应用程序上不是那么重要,但是当你有1000个用户时,它真的堆积起来。
  • 如果服务器确实在120秒后醒来,那么您将同时获得四个响应,这将对您应用中的竞争条件造成严重破坏。

使用setInterval没有什么特别的错误(即使它与jQuery完全回调是多余的),但你需要设置超时。