我拿到了这些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 });
})();
谢谢!
发布于 2013-08-07 17:42:18
不同之处在于:长轮询允许某种类型的事件驱动通知,因此服务器能够主动向客户端发送数据。可以说,正常轮询是对要获取的数据的定期检查。维基百科对此有很详细的描述:
对于长轮询,客户端以类似于正常轮询的方式向服务器请求信息;但是,如果服务器没有任何可供客户端使用的信息,则服务器不发送空响应,而是保持请求并等待信息变为可用(或等待合适的超时事件),之后最终将完整响应发送到客户端。
长轮询减少了需要发送的数据量,因为服务器只在真正有数据时发送数据,因此客户端不需要在每个间隔x进行检查。
如果您需要一种性能更好(也更优雅)的全双工客户机/服务器通信方式,考虑使用WebSocket协议,那就太好了!
https://stackoverflow.com/questions/18099798
复制相似问题