2009-07-28 61 views
5

我正在寫一個基於AJAX/COMET的在線聊天室。我的設計是:不同瀏覽器的超時行爲?

請求

----------------- wait ------------------- ------>發送轉儲數據

----------------- wait ------------------ ------->發送轉儲數據

----------------- wait ----------------- -------->發送轉儲數據

-----------------等待---------------- --------->發送轉儲數據

-----------------等待------------------------->發送轉儲數據

------有事發生,得到迴應。

另一個請求 ..... ....

正如你看到的,服務器一直保持請求並等待事情發生,如果有一些事件發生的事情,只是把數據和結束請求。然後客戶會再次發出請求。 請求中有勾號,所以如果兩個請求之間存在事件發生,服務器知道客戶端有未決事件。

在瀏覽器超時之前,服務器還會發送一些空閒數據以防止客戶端超時。

現在,問題來了:什麼是不同瀏覽器的超時行爲?我知道瀏覽器發送請求並等待數據,如果等待時間太長,它會超時。但是,不同瀏覽器的超時行爲是什麼?有什麼標題可以控制瀏覽器的超時行爲嗎?通過了解瀏覽器的超時行爲,以便我可以決定如何處理它們。我在哪裏可以找到這些數據?

+0

看這個答案http://stackoverflow.com/a/1343963/779408 – breceivemail 2013-01-26 05:58:46

回答

9

實際上,由於客戶端可能正在經歷代理服務器,因此不同瀏覽器的超時顯式值並不像您想象的那麼多。

相反,我會問你爲什麼要問 - 你將不得不處理超時問題,並且沒有任何流式傳輸到瀏覽器會阻止它每一次。因此,最好在連接斷開時簡單地從客戶端重新查詢服務器 - 這是很多人推薦長時間輪詢的一個原因,這是您似乎正在嘗試做的事情。無論您選擇流式解決方案還是長時間輪詢,都必須考慮連接重置。

對於簡單的隱藏iframe客戶端設置,it's not too hard to do - 對於XHR請求也同樣簡單,具體取決於您使用的是哪種客戶端框架。

IE中的大多數現代瀏覽器的超時時間似乎爲rather large(60分鐘哇),而FF時間更短(about:config表示300秒 - eek) - 但正如我所說的那樣,這並不能幫助您一個代理服務器,其中超時可能短至2分鐘或更短,這取決於代理管理員如何配置它。

因此,總結 - 超時發生。你無法阻止他們。在客戶端發生重新連接時編寫代碼(限制服務器停止旋轉),並且不要再爲此擔心。除了更健壯以外,它還可能使代碼更具性能,因爲您不會定期將無用的數據抽到每個客戶端。