使用mysql进行ajax长轮询


ajax long polling with mysql

Im使用类似的脚本,如下所述:来自mysql的长轮询信息不起作用在我的网站上,它是有效的,但当我刷新页面或单击其他链接时,我会收到错误警报+网站开始严重滞后,有人能告诉我是什么原因造成的吗?

我的代码:

$oldIDq = mysql_query("SELECT * FROM messages ORDER BY id DESC LIMIT 1");
while($oldrow = mysql_fetch_array($oldIDq)){
$oldID = $oldrow['id'];    
}
$func = '
var oldID = '.$oldID.';
function wait() {
$.ajax({
    type: "GET",
    url: "../scripts/msg_scripts/msg.php?oldid=" + oldID,
    async: true,
    cache: false,
    success: function (data){
     var json = eval(''('' + data + '')'');  
     if (json[''msg_content''] != "") {
      alert("new meassage added");   
     } 
     oldID = json[''oldID''];
     setTimeout(''wait()'',1000);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown){
      alert("error: " + textStatus + "(" + errorThrown + ")");  
      setTimeout(''wait()'',15000);
    }
});
}
$(document).ready(function(){
    wait();
});
';

服务器:

<?php 
    session_start();
    $connect = mysql_connect ("localhost", "root", "")
or die ("couldnt connect");
mysql_select_db ("***") or die ("not found"); //if db was   not found die
mysql_query("SET NAMES 'utf8'");
$oldID = $_GET['oldid']; 
$result = mysql_query("SELECT id FROM messages ORDER BY id DESC LIMIT 1");
while($row = mysql_fetch_array($result))
{
    $last_msg_id = $row['id']; 
}
while($last_msg_id <= $oldID)
{
    usleep(1000);
    clearstatcache();
    $result = mysql_query("SELECT id FROM messages ORDER BY id DESC LIMIT 1");
    while($row = mysql_fetch_array($result))
    {
        $last_msg_id = $row['id'];
    }
}
$response = array();
$response['msg'] = 'new';
$response['oldID'] = $last_msg_id;
echo json_encode($response);
?>
$_GET['oldid']中的proplem当您单击另一个链接或刷新没有链接的页面时,变量$oldid将为空,sql将失败。js函数一直在调用自己,每次出现错误都不做任何更改,ajax会一直调用keep-failing,这将导致一个无限循环,挂起你的网站,我想如果你在firebug上检查它,你会看到这种情况发生。

现在不要,如果这就是你的意思,希望它能帮助

相关文章: