我想使用长轮询。 我谷歌它,发现了许多有用的资源,因为很多,我感到困惑,这是更好的。 以下是两个地方的三个代码片段。
https://gist.github.com/jasdeepkhalsa/4353139
// Long Polling (Recommened Technique - Creates An Open Connection To Server ∴ Fast)
(function poll(){
$.ajax({
url: "server",
success: function(data)
{
//Update your dashboard gauge
salesGauge.setValue(data.value);
},
dataType: "json",
complete: poll,
timeout: 30000
});
})();
// The setTimeout Technique (Not Recommended - No Queues But New AJAX Request Each Time ∴ Slow)
(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);
})();
https://github.com/panique/php-long-polling/blob/master/client/client.js
function getContent(timestamp)
{
var queryString = {'timestamp' : timestamp};
$.ajax(
{
type: 'GET',
url: 'http://127.0.0.1/php-long-polling/server/server.php',
data: queryString,
success: function(data){
// put result data into "obj"
var obj = jQuery.parseJSON(data);
// put the data_from_file into #response
$('#response').html(obj.data_from_file);
// call the function again, this time with the timestamp we just got from server.php
getContent(obj.timestamp);
}
}
);
}
我的问题是哪些代码是长轮询最佳做法? 我应该使用哪一个?
提前致谢。
答案 0 :(得分:3)
第一种方法在我看来更好:
如果服务器配置为超时超过30000的长轮询,那么第一个服务器将超时断开请求并发送新请求,不会调用success()函数
(虽然complete()将是,但错误也可以在error()中处理,就像这样
error: function(x, t, m) {
if(t==="timeout") {
alert("got timeout");
} else {
alert(t);
}
}
)。 虽然在第二个请求将在30000之后发送,因此您将在客户端具有不可预测的行为(两个请求可以收到相同的答案,因此可以复制数据)。
如果服务器配置为长轮询小于30000,则客户端的第二种方法数据不会及时更新。
如果服务器配置为使用30000进行长轮询,那么它应该没有任何区别。
总结:在第一种方法中,情况是可控制的,而在第二种情况下,并非总是如此。