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

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

我正在开发一个简单的聊天应用程序,每个房间可能有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秒的沉差距,这会打败长轮询的好处.当呼叫从服务器返回(长或短)时,让浏览器立即启动另一个请求.作为备份,在每次服务器调用时,浏览器启动的超时时间略长于服务器端超时,但在返回请求时取消它.如果服务器请求失败并且浏览器超时完成,则启动新请求.

原文地址:https://www.jb51.cc/php/136784.html

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

相关推荐