2010-08-01 126 views
6

有一段時間我一直在玩我的通知系統的長輪詢的想法,但我從來沒有想過一種方法,使其更有效的後端。AJAX長輪詢,提高效率

我看到的大多數實現都保持連接打開狀態,並且php每隔幾秒查詢一次數據庫服務器以查看是否有新的數據已被創建。這讓我覺得沒有比使用JavaScript重複輪詢服務器更好的方法。

在任何一種情況下,我的數據庫服務器都被擊中數千次,這是不可取的。

是否有任何可以將執行/休眠長輪詢腳本「提醒」新系統的系統?

回答

2

單系統

如果你的應用是改變數據庫,那麼你可以觸發你的聽衆,只有當你的應用程序進行修改(最好只更改到是每個聽衆感興趣的實體的唯一系統)。

多個系統

在多個系統訪問的情況下/更改了數據庫,您可以

  • 與數據庫的工作觸發

,或者如果你不想要做到這一點(我通常避免它),你可以

  • 確保所有其他系統訪問數據庫將始終通知應用程序(通過某些消息機制)

,或者如果這是不可能的

  • 你可以只有一個迴路至少優化該經常查詢數據庫,並且一次通知所有的監聽器(所以你沒有爲每個監聽器設置一個循環)。
+0

我很喜歡系統,如數據庫通知工作(ajax在Web應用程序中長時間輪詢)。對於這種運作方式,我還是有點朦朧。 當前循環,服務器當前檢查數據庫中的新條目,然後檢查並刷新是否存在新數據。我不確定數據庫事件如何到達睡眠進程,除非它再次輪詢後端。 也許我這樣做**的方式**是最有效率的? – 2010-08-03 08:39:51

+0

@Charles:是的,這可能是PHP中的一個小問題!我認爲,這個線程包含一些答案:http://stackoverflow.com/questions/603201/using-comet-with-php – 2010-08-03 10:33:44