gpt4 book ai didi

php - 简单的PHP长轮询聊天脚本,太简单?

转载 作者:可可西里 更新时间:2023-11-01 12:36:40 24 4
gpt4 key购买 nike

我正在开发一个简单的聊天应用程序,每个房间可能有 10 到 20 个用户。

查询数据库以获取新消息的脚本对于它将收到的所有请求来说看起来太简单了。

下面是循环获取新消息的代码块,脚本的其余部分只是获取变量、查询的构造和 json 响应对象:

$sleepTime = 1; //Seconds
$data = "";
$timeout = 0;

//Query database for data
while(!$data and $timeout < 10){
$data = getQuery($sql);
if(!$data){
//No new messages on the chat
flush();
//Wait for new Messages
sleep($sleepTime);
$timeout += 1;
}else{
break;
}
}

上面的 block 将在 10 秒内每秒向数据库查询新消息,如果 10 秒后没有新消息,它将通知浏览器。浏览器等待 5 秒,然后发送另一个请求获取新消息。

但是,如果脚本发现新消息,浏览器将在收到来自服务器的新消息响应后立即请求更多新消息。

这个过程一直在继续......

那么我怎样才能进一步优化这个过程呢?这是尽善尽美吗?在我的本地服务器上运行良好,但我担心只有少数用户可能会因所有请求和循环而使实时服务器(共享主机)过载。

这是现场演示,您可以使用 Firebug 检查 http://pixbush.com/chat/chat.php

最佳答案

根据您的描述,听起来您有 5 秒的静默间隙,这抵消了长轮询的好处。当调用从服务器返回(长或短)时,让浏览器立即启动另一个请求。作为备份,在每次服务器调用时,让浏览器启动一个比服务器端超时稍长的超时,但在返回请求时取消它。如果服务器请求失败并且浏览器超时完成,则启动一个新请求。

关于php - 简单的PHP长轮询聊天脚本,太简单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3623290/

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