如何检查数据库是否使用php和ajax更新?

如何检查数据库是否使用php和ajax更新?,php,ajax,chat,Php,Ajax,Chat,我正在制作一个聊天室,除了更新之外,一切都正常。 我目前每3秒刷新一次页面以检查任何新消息,但这肯定会在服务器上造成巨大负载,而且不美观 我想要的是,聊天盒只在数据库更新时才检查新消息,而不是每隔3秒检查数据库的计时器,您需要AJAX推送(服务器仅在出现新消息时才向客户端发送更新)。请参见此处的示例: 类似这样的内容将详细说明客户的请求: function sendRequest(uid){ var xmlhttp; var myUserId=""; myUserId=u

我正在制作一个聊天室,除了更新之外,一切都正常。 我目前每3秒刷新一次页面以检查任何新消息,但这肯定会在服务器上造成巨大负载,而且不美观

我想要的是,聊天盒只在数据库更新时才检查新消息,而不是每隔3秒检查数据库的计时器,您需要AJAX推送(服务器仅在出现新消息时才向客户端发送更新)。请参见此处的示例:

类似这样的内容将详细说明客户的请求:

function sendRequest(uid){
    var xmlhttp;
    var myUserId="";
    myUserId=uid;

    if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            displayInChat(xmlhttp.responseText)//do stuff (process response, display message)
        }
    }

    xmlhttp.open("GET","process_request.php?userid="+uid,true);
    xmlhttp.send();

    setTimeout("sendRequest("+uid+")",1000); //poll every second
}
现在,您希望延迟服务器(process_request.php)的回复,直到有东西要发送(使用类似
while($msg=new_msgs())==false){sleep(timeout);}
,或者请求超时,并从客户端发送新的轮询(
setTimeout(“sendRequest(+uid+”);
)。这称为长轮询,对于像聊天这样的应用程序,它比用空响应进行响应更有效

您可以在此处找到更多信息:

在这里:

在这里:


[EDIT]作为一种非常必要且更高效的长轮询替代方案,现在所有主流浏览器都支持长轮询。该标准已于2011年进入(拟定)标准状态(这意味着该标准已退出草案状态,此后未发生任何变化)。PHP中最好的实现可能是(据我所知,到目前为止,使用该标准)。下面是一个关于如何使用它构建网络聊天的教程:

我从来不知道这一点(尽管我怀疑它存在)。回答得好!你有关于它的使用/实现的文档/教程的链接吗?我也理解,ajax推送是我需要的,但找不到关于如何实现它的教程,任何链接或教程?你可以使用任何打包的解决方案,如APE或start here(这里还列出了一些类似HTML5 WebSocket的奇特替代方案),或者只是检查示例上的代码,然后自己动手(这是我不久前做的,我记得很简单:)而不是ajax,您可以使用WebSocket