我正在嘗試製作傳入消息的通知系統。對於examlpe用戶停留在頁面上,他在一個塊中接收到他有2條未讀消息。長查詢服務器循環
我的客戶端代碼:
(function getmess(){
var id = '<?=$MY_ID;?>';
$.ajax({
url:"notif.php",
data:{"id":id,},
type:"GET",
success: function(result){
$("#count").html(result);
}, dataType: "json",
complete: getmess,
timeout: 10000});
})();
我的服務器代碼:
<?php
$mysqli = new mysqli('localhost', 'root', '', 'lc');
if (mysqli_connect_errno()) {
printf("error: %s\n", mysqli_connect_error());
exit;
}
$MY_ID = $_POST['id'];
while (true) {
$result = $mysqli->query("SELECT COUNT(*) FROM messages WHERE user_get='$MY_ID' AND status='0' ");
if (mysqli_num_rows($result)) {
while ($row = mysqli_fetch_array($result)) {
echo $row[0]."";
}
exit;
}
sleep(5);
}
一切正常,但我的問題是,AJAX請求發送每隔1秒和這些請求的lengh爲1其次,他們超載服務器。
我想等待服務器響應至少10秒,如果成功響應立即發送新的請求,以及如果服務器在10秒內沒有響應,即在那裏的數據庫是沒有變化的,然後發送一個新的查詢長度爲10秒。
我認爲這是錯誤的東西與服務器(可切斷迴路),但我不知道如何改進這一點。
我建議使用websockets來代替。 – Oriol
您的客戶端代碼有問題,而不是服務器。你必須用'setTimeout'包裝'getmess'調用。 – hindmost