У меня есть простой кометный чат.
JavaScript отправляет запрос ajax с длительным опросом. Когда сервер находит новые сообщения в базе данных, он отвечает и выдает JSON. Далее JavaScript снова отправляет запрос.
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;
проблема в следующем: этот while ($ flag) может выполняться долго (если никто не публикует сообщения). Таким образом, Apache может выдавать исключения (максимальное время выполнения, иногда 502 Bad Gateway или Gateway Timeout).
Как это решить?
использовать .htaccess и "php_value max_execution_time 0"?
или просто отправить новый запрос из JavaScript, когда сервер возвращает ошибку (это замедляет получение сообщений)?
Может быть, есть другой способ?