我正在开发一个简单的聊天应用程序,每个房间可能有 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查看