民意调查与长时间轮询

民意调查与长时间轮询

问题描述:

我接触到了这些examples显示投票与JavaScript中的长轮询,但我不明白他们是如何彼此不同。特别是对于长轮询的例子,它是如何保持连接开放的?民意调查与长时间轮询

这是传统的轮询的情况是这样的:

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

     //Setup the next poll recursively 
     poll(); 
    }, dataType: "json"}); 
    }, 30000); 
})(); 

,这是长轮询例如:

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

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

谢谢!

区别在于:长轮询允许某种事件驱动的通知,所以服务器能够主动向客户端发送数据。正常轮询是一个周期性的检查数据取回,可以这么说。*对此非常详细:

通过长轮询,客户端以类似于正常轮询的方式向服务器请求信息;但是,如果服务器没有任何可用于客户端的信息,则服务器不会发送空的响应,而是保存该请求并等待信息变为可用(或适合的超时事件),然后完成响应最后发送给客户端。

长轮询减少了需要发送的数据量,因为服务器只在有真正的IS数据时发送数据,因此客户端不需要在每个间隔x检查。

如果您需要全双工客户端/服务器通信的更高性能(和imho更优雅)方式,请考虑使用WebSocket协议,这太棒了!

+1

客户端能分辨长轮询和慢响应的区别吗?在我看来,投票和长时间投票基本上是一回事。轮询:“客户端:它是否准备好了?服务器:否”。长轮询:“客户端:它准备好了吗?服务器:...否”。 – DavidS

+0

@Davids:以下是区别:通过轮询,客户端会询问并立即回答“是/或”。通过长时间的投票,客户询问但*不会立即得到答案。服务器不会对问题做出回应,直到有*可以回答的东西。所以这个问题一直在等待着。 – Robert

+0

@Robert如果发生超时事件并且服务器无法在长轮询中发送数据,会发生什么情况?客户是否应该再次发送相同的请求? –

轮询基本上是定期检查服务器在客户端提出请求后的信息。如果所需的信息可用,它将以响应的形式发送给客户端,否则服务器将发送一个空的响应。轮询是通过函数的帮助完成的,如setInterval()和setTimeout()

长轮询的情况下,客户端向服务器发出请求,如果响应可用,服务器的信息,否则响应,直到所需的信息不存在,它保持请求与传统的轮询不同,服务器会以空响应进行响应。