私はシンプルなチャットアプリに取り組んでおり、おそらく 1 部屋あたり 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で確認できるライブデモです。