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?
You should check out APE Project. It's an Ajax Push Engine, it might help for realtime communication: www.ape-project.org
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With