Я создаю систему уведомлений, что мгновенно проверяет, есть ли какие-либо новые уведомления для онлайн-пользователя.Длинный опрос Становится призраком
Вот мой сценарий до сих пор:
//...include(myscripts.php)...
function notificationsCount($id)
{
if(is_numeric($id) && !empty($id) && $id>0) return mysql_result(mysql_query("SELECT COUNT(*) FROM notifications WHERE unRead='1' AND userID = '$id'"),0);
}
if($_GET['getNotificiationCount'] && $_GET[userID])
{
$current = notificationsCount($_SESSION['userID']);
$count = 0;
while($count<20 && !connection_aborted()){
$c = notificationsCount($_SESSION['userID']);
if($c!=$current && $c!=0)
exit($c);
$count++;
sleep(1);
}
exit("0");
}
стороне клиента:
var checkNotify;
$(window).unload(function() { checkNotify.abort(); });
//Nav Notifications
function checkNotifications()
{
checkNotify = $.ajax({
url: "/notifications.php?getNotificiationCount=true&userID=<?=$_SESSION[userID]?>",
timeout: "30000",
cache: false,
success : function(data, textStatus, XMLHttpRequest) {
if(data!=0) {
$("#nav_notification_bubble").removeClass("displayoff");
$("#notification_count").html(data); }
checkNotifications();
},
error: function() {}
});
}
checkNotifications();
Это работает, но если оставить страницу, веб-сервер не ответит (на клиентской стороне) , пока не закончится сценарий «уведомлений.php».
Что я могу сделать, чтобы убить скрипт, если клиент покидает страницу?
Мой веб-сервер У включен Apache Gzip - это будет ждать завершения буфера? Спасибо.
JavaScript должен быть написан асинхронно. 'checkNotify' - это один var, который пытается быть перезаписан вместо создания новых экземпляров. – rxgx