gpt4 book ai didi

javascript - 我应该使用以下哪些 javascripts 长轮询代码?

转载 作者:行者123 更新时间:2023-11-29 19:34:44 25 4
gpt4 key购买 nike

我想使用长轮询。我用谷歌搜索它并找到了许多有用的资源,而且由于很多,我开始混淆哪个更好。以下是来自两个地方的三个代码片段。

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);
}
}
);
}

我的问题是哪个代码是长轮询的最佳实践?我应该使用哪一个?

提前致谢。

最佳答案

我认为第一种方法更好:

  1. 如果服务器配置为超时超过 30000 的长轮询,那么对于第一个请求,您将通过超时中断请求并发送一个新请求,success() 函数将不会被调用

    (虽然 complete() 将是,但也可以像这样在 error() 中处理错误

    error: function(x, t, m) {
    if(t==="timeout") {
    alert("got timeout");
    } else {
    alert(t);
    }
    }

    )。而在第二个中,一个新请求将在 30000 之后发送,因此您在客户端会有不可预测的行为(两个请求可以收到相同的答案,因此数据可能会重复)。

  2. 如果服务器配置为小于 30000 的长轮询,则在第二种方法中,客户端的数据将不会及时更新。

  3. 如果服务器配置为使用 30000 进行长轮询,则应该没有任何区别。

总而言之:在第一种方法中,情况是可控的,而在第二种方法中——并非总是如此。

关于javascript - 我应该使用以下哪些 javascripts 长轮询代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25681095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com