2012-06-17 38 views
0

我的網站幾乎完成,但我有一個問題。每10到15秒我的網站將搜索數據庫來檢查是否有更新。如果有更新,則向在線用戶發送通知。 我搜索谷歌,發現兩個解決方案:彗星和AJAX。對我來說哪個更好。還是有更好的解決方案?在10-> 15秒輪詢期間哪個更好的Comet或AJAX?

+0

我建議你的選擇是:1)AJAX輪詢2)自託管的實時解決方案(彗星/的WebSockets)(但是這取決於你的託管3)關負載到託管實時服務(彗星/的WebSockets)。什麼是您的託管解決方案?自己託管完整的「根」權限?還是共享主機?由於使用PHP和Apache,由於需要維護多個持久連接,因此可能無法實現自託管實時解決方案。如果你能澄清,我會建議一個解決方案。 – leggetter

+1

我對網絡託管瞭解不多,但它是一種共享託管,他們將其命名爲業務託管。我的網站使用php和jquery,因此我認爲彗星和ajax對我來說非常合適,但是我讀了很多評論,他們說使用php實現彗星不是一個好選擇,您需要使用socket.io或node.js.你同意他們和你的意見嗎? – MQuy

回答

0

在我看來一個網站,是對共享主機和使用Apache和PHP是使用realtime hosted service推更新連接的客戶端的最佳解決方案。

這裏的原因:

阿帕奇不是用來處理長期運行的持久連接,所以它不是彗星或WebSocket的解決方案的最佳選擇。您會發現PHP Comet和WebSocket解決方案可能會作爲守護程序進程獨立運行,而不是Apache。在共享主機上,您很可能無法運行守護程序進程,您的託管服務提供商也不太可能對您保持許多持續連接打開並佔用共享機器上的資源感到滿意。

如果您使用AJAX輪詢解決方案並每隔10到15秒輪詢您的網站,並在該輪詢中包含數據庫查詢,那麼如果您的網站上擁有合理數量的客戶端,資源使用率可能會迅速增加:

100的客戶端,10秒鐘的輪詢60第二週期= 100×10×6 = 6000的請求和每分鐘數據庫查詢。如果沒有更新發生,很多時候這些請求也可能是浪費。你可以找到一個更大的例子here

通過卸載立即推送更新到您的網站的客戶端刪除這些6000名的請求和數據庫查詢,並與一個調用實時替換它們的能力託管服務。該服務維護與客戶端的持久連接,以便當您的應用程序將更新推送給它時,它可以將它們交付給連接的客戶端。

最後,你應該知道的WebSockets取代彗星爲實時通信的首選解決方案。該協議是爲了解決Comet解決方案試圖通過各種黑客解決的問題而創建的。有關這些技術和WebSockets的歷史的更多信息,請參閱here