gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 22:45:48 24 4
gpt4 key购买 nike

我正在制作一个聊天框,一切正常,除了更新。我目前每 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

关于php - 如何检查数据库是否已使用 php 和 ajax 更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11907372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com