2014-09-05 31 views
2

我想使用长轮询。 我谷歌,发现很多有用的资源,并且因为很多,我越来越迷惑哪个更好。 以下是来自两个地方的三个代码片段。我应该使用以下哪种JavaScript长查询码?

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

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

在此先感谢。

回答

3

第一种方法是在我看来更好:

  1. 如果配置为长轮询超时超过30000服务器,然后用第一个你将不得不超时断请求和新请求将被发送,成功()函数就不叫

    (而完整的()会,也错误可能是错误的()这样的

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

    处理)。 虽然第二个请求会在30000之后发送,所以您在客户端会有不可预知的行为(两个请求可能会收到相同的答案,因此数据可能会被复制)。

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

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

总结:在第一种方法情况下是可控的,而在第二种情况下 - 并非总是如此。

+0

感谢您的意见与解释 – pmverma 2014-09-05 09:21:28