我们是否需要设置超时进行短轮询

Do we need setTimeout for short polling?

本文关键字:超时 是否 设置 我们      更新时间:2023-09-26

如果我想实现这样的短轮询:

function firstCall(){
   $.ajax({
     ...
     success: function(response){
         if (response.OK == "OK"){
              secondCall();
         }else{
            firstCall();
         }
     }
  });
}

这就够了吗? 还是我真的需要用 setTimeout 将 else 中的firstCall()子句括起来?谢谢

我建议您使用一点超时,因为现在您正在为服务器创建大量流量。Ajax速度很快,success会经常被执行。

所以我建议你使用 setTimeoutsetInterval

此解决方案依赖于第一次调用才能成功。 如果您的代码在任何时候没有"成功"(也许是服务器打嗝?),您的"轮询"将停止,直到页面刷新。

可以使用 setInterval 按定义的时间间隔调用该方法,从而避免此问题:

setInterval(function(){
    $.ajax({}); // Your ajax here
}, 1000);

使用这两种解决方案,您的服务器将处理许多可能不需要的请求。 您可以使用像 PollJS(无耻的自插拔)这样的库来增加延迟,这将提高性能并减少带宽:

// Start a poller
Poll.start({
    name: "example_poller",
    interval: 1000,
    increment: 200,
    action: function(){
        $.ajax({}); // Your ajax here
    }
});
// If you want to stop it, just use the name
Poll.stop("example_poller");

如果要减少对服务器的请求,则需要setTimeout()

如果您不想等待用户操作或 ajax 响应在特定时间后触发事件,则需要设置 Timeout,否则您可能会等待 ajax 调用成功或错误事件。