私はこのサイトを初めて使用するので、質問に関して必要な情報をすべて提供できることを願っています。
ロングポーリングを使用して「新しいメッセージが到着した通知」を作成しようとしています。window.onLoad
現在、サイトの各ページのイベントごとにポーリング リクエストを開始しています。
サーバー側では、無限ループがあります。
while(1){
if(NewMessageArrived($current_user))break;
sleep(10);
}
echo $newMessageCount;
クライアント側には、次の (簡略化された) ajax 関数があります。
poll_new_messages(){
xmlhttp=GetXmlHttpObject();
//...
xmlhttp.onreadystatechange=got_new_message_count;
//...
xmlhttp.send();
}
got_new_message_count(){
if (xmlhttp.readyState==4){
updateMessageCount(xmlhttp.responseText);
//...
poll_new_messages();
}
}
問題は、ページが読み込まれるたびに、上記のループが再び開始されることです。その結果、ユーザーごとに複数の無限ループが発生し、最終的にサーバーがハングします。
*このNewMessageArived()
関数は、MySQL DB にクエリを実行して新しい未読メッセージを探します。
*値start_session()
を取得するために実行するphpスクリプトの最初に。$current_user
time()
現在、このサイトの唯一のユーザーであるため、このループ内のファイルに書き込むことで、この動作を簡単にデバッグできます。私が見ているのは、ファイルが 10 秒に 1 回以上書き込まれているということですが、ページからページに移動したときにのみ開始されます。
追加情報が役立つ場合はお知らせください。
ありがとうございました。