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