我正在構建一個需要相對不變的數據庫輪詢的網頁組件。我可以看到兩種不同的方法,我想知道他們中的一個是否比其他人好,或者如果我錯過了第三個選擇。AJAX輪詢頻率 - 要長期輪詢還是不輪詢長輪詢?
1)發送關斷一個AJAX請求每1或2秒,以檢查更新。無論是否有新數據,每個請求都會立即返回。
2)觸發一個AJAX請求,直到它接收到數據或發生超時纔會返回。發生這些事件時,它會觸發下一個請求。 (我想,這就是所謂的長輪詢?)
數據庫查詢的數量將與任一相同,但與2號會有更少的請求,從中可以節省帶寬和客戶資源的瀏覽器觸發。對於服務器來說,是否最好有一個PHP請求保持活動並在兩次查詢之間休眠,或者每隔幾秒鐘啓動一次,輪詢數據庫,然後關閉?或者沒有什麼區別,我對此太強調了?
編輯:我想我也應該指出,這是一個較大的Web應用程序的聊天工具。通信的輕微延遲不會殺死用戶,因爲聊天是次要功能。
這實際上取決於長民意調查將會持續多久,以及您連接的客戶數量。如果你有2或3個,長時間輪詢可能會更好(因爲更新會是瞬間的)。如果你有很多,長期民意調查將是非常昂貴的,因爲每個連接都需要一個PHP過程(因爲它是讓PHP持續開放的PHP)。所以在這種情況下,我會使用「智能」輪詢間隔。基本上,如果平均更新時間爲10秒,則輪詢時間爲5,然後是8,然後是10,然後是11等)。基本上把時間減少一半。它在服務器上更容易(因爲平均負載下降),但速度很快... – ircmaxell 2010-10-01 18:40:13
我想我還應該說,這是一個更大的Web應用程序的聊天部件。通信的輕微延遲不會殺死用戶,因爲聊天是次要功能。但我們希望它是合理的(2秒內?) – Derek 2010-10-01 18:43:31
老實說,我不會在PHP中這樣做。獲取另一種語言,並實現一個隊列系統並使用持久的TCP連接來回傳輸......或者,爲什麼不簡單安裝Jabber並完成(並且可能實現一個JS接口到服務器)... – ircmaxell 2010-10-01 18:57:31