我是新來這個網站,所以我真的希望我會提供所有關於我的問題的必要信息。Ajax長輪詢(彗星)+ PHP上lighttpd v1.4.22多個實例問題
我一直在嘗試使用長輪詢來創建「新郵件到達通知」。目前,我正在通過我網站中每個頁面的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查詢新的未讀消息。
*在php腳本的開頭,我運行start_session()
以獲得$current_user
的值。
我目前是本網站的唯一用戶,因此我很容易通過將time()
寫入此循環中的文件來調試此行爲。我所看到的是文件在10秒內被寫入的次數比一次多,但是隻有當我一頁一頁地進行時纔會啓動。
如果有任何其他信息可能有幫助,請讓我知道。
謝謝。
謝謝您的回答。每次我回復一些數據時,這個解決方案不會觸發ajax響應函數嗎?使此解決方案成爲常規輪詢而不是長輪詢。 – fibonacci 2009-11-23 21:20:00