加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 13:16:47 所属栏目:PHP教程 来源:网络整理
导读:我正在开发一个简单的聊天应用程序,每个房间可能有10到20个用户. 查询数据库以查找新消息的脚本对于它将获得的所有请求看起来过于简单. 下面是循环新消息的代码块,脚本的其余部分只是获取变量,构造查询和json响应对象: $sleepTime = 1; //Seconds$data = ""
我正在开发一个简单的聊天应用程序,每个房间可能有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;
    }
}

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

但是,如果脚本发现新消息,则一旦获得来自服务器的新消息的响应,浏览器将立即请求更多新消息.

这个过程一直持续……

那么我怎样才能进一步优化这个过程呢?
这是好事吗?
在我的本地服务器上工作正常,但我担心只有少数用户可能会使所有请求和循环的实时服务器(共享主机)过载.

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

根据你的描述,听起来你有5秒的沉默差距,这会打败长轮询的好处.当呼叫从服务器返回(长或短)时,让浏览器立即启动另一个请求.作为备份,在每次服务器调用时,浏览器启动的超时时间略长于服务器端超时,但在返回请求时取消它.如果服务器请求失败并且浏览器超时完成,则启动新请求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读