Sir Hally
Sir Hally

Reputation: 2358

PHP Comet. How to do it better?

I have a simple comet chat. JavaScript send ajax request with long polling. When server find new messages in the database, it answers and gives JSON. Next, JavaScript send the request again.

Javascript:

function cometConnect(){
$.ajax({
      cache:false,
      type:"get",
      data:'ts='+ts,
      url: urlBack,
      async: true,
      success: function (arr1) {
      //work with JSON
      //.....
      },
      complete:function(){
        cometConnect(true);
        nerr=false;
      },
      dataType: "text"
    }); 
}

PHP

$flag=true;
$lastmodif = isset($_GET['ts']) ? $_GET['ts'] : 0;
while($flag){
  $q=mysql_query("SELECT text, posterId,modified, fromUserId,toUserId, login FROM commonMessage WHERE modified>$lastmodif");

      while($r=mysql_fetch_row($q)){
        $flag=false;
        //Prepare JSON... variable $resp
            //.........
      }

  usleep(5000); 
}
echo $resp;

the problem is following: this "while($flag)" can execute for a long time (if nobody posts messages). So, Apache can throw the exeptions (max execution time, sometimes 502 Bad Gateway or Gateway Timeout).

How to solve it?

use .htaccess and "php_value max_execution_time 0"?

or simple send new request from JavaScript, when server returns error (it makes getting messages more slow)?

May be, there is some other way?

Upvotes: 4

Views: 1304

Answers (2)

Hirvesh
Hirvesh

Reputation: 7982

You should check out APE Project. It's an Ajax Push Engine, it might help for realtime communication: www.ape-project.org

Upvotes: 6

Adeel
Adeel

Reputation: 19228

if there are no messages to push from server in say 40 sec, you send some response from server, on the basic of which the client re-request.

Upvotes: 4

Related Questions