微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在制作一个聊天框,一切正常,除了更新的东西.
我目前每3秒刷新一次页面以检查任何新消息,但它肯定会导致服务器上的大量负载并且不优雅.

我想要的是,聊天框只会在数据库更新时检查新消息,而不是每隔3秒检查一次数据库的计时器

解决方法:

您需要AJAX推送(服务器仅在有新内容时才将更新发送到客户端).请在此处查看示例:http://provatosys.com/bid.html

这样的事情会详细说明来自客户的请求:

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“)”,timeoutinmillisecs);).这称为长轮询,对于像聊天这样的应用程序比使用空响应回复更有效.

你可以在这里找到更多信息:How do I implement basic “Long Polling”?

在这里Make AJAX call wait for event in php

在这里Comet (programming)

[编辑]作为长期民意调查的一个非常需要和更有效的替代方案,现在所有主流浏览器都支持websockets. RFC6455已于2011年进入(建议)标准状态(这意味着它已退出草案状态并且没有任何因为). PHP中最好的实现可能是Ratchet(据我所知the most up to date到目前为止的标准).以下是如何使用它构建网络聊天的教程:http://socketo.me/docs/hello-world

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐