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