pmverma
pmverma

Reputation: 1703

Which of the following javascripts long polling code should I use?

I wanted to use long polling. I google it and found many helpful resources, and since many, I am getting confuse which is better. Following are three code snippets from two place.

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

My question is which code is long polling best practice? Which one should I use?

Thanks in advance.

Upvotes: 2

Views: 807

Answers (1)

heroin
heroin

Reputation: 2247

The first approach is better on my opinion:

  1. If server configured for long polling with timeout more than 30000, then with first one you will have breaking request by timeout and a new request will be sent, success() function would not be called

    (while complete() will be, also error could be handled in error() like this

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

    ). While in the second one a new request would be sent after 30000 and so you would have unpredictable behavior on a client side (two requests can receive the same answer, so data could be duplicated).

  2. If server configured for long polling with less than 30000, then in second approach data on a client side would not be updated in time.

  3. If server configured for long polling with 30000, then it should not be any difference.

To summarize: in first approach situation is controllable, while in second one - not always.

Upvotes: 3

Related Questions