Search code examples
phpmysqlajaxlong-polling

Is this a legitimate long polling approach?


Is this PhP script a legitimate approach to long polling or is this to heavy on the server?

$FoundNewContent = false;

$tokens = array();

while(!$FoundNewContent) {
    usleep(300000);
    clearstatcache();
    $SQL1 = "SELECT * FROM tokens WHERE  ID > ".$_GET['tokenID'];
    $result1 = mysql_query($SQL1);
    while($row1 = mysql_fetch_array($result1, MYSQL_ASSOC)) {
        array_push($tokens, $row1);
        $FoundNewContent = true;
    }
}

// Parse XML array    

flush()

I am calling this script via Ajax.


Solution

  • Depends on your server setup - It should work fine as long as you don't use session, but if there are too many connections at a time it might stall the server.

    Also I would add a time limit where it returns nothing and restarts the polling. Otherwise the script could run forever if no data is added and the server timeout is set to unlimited. I usually add a 30 sec limit.

    Something like:

    $FoundNewContent = false;
    $tokens = array();
    $time = time();
    while(!$FoundNewContent) {
      usleep(300000);
      clearstatcache();
      $SQL1 = "SELECT * FROM tokens WHERE  ID > ".$_GET['tokenID'];
      $result1 = mysql_query($SQL1);
      while($row1 = mysql_fetch_array($result1, MYSQL_ASSOC)) {
        array_push($tokens, $row1);
        $FoundNewContent = true;
      }
      if($time<time()-30) break;
    }
    flush()