2010-06-30 52 views
3

經過一整天的搜索,我會談論最佳的在線聊天解決方案。在線聊天 - Ajax民意調查或反向Ajax

這是我知道的:

阿賈克斯調查是舊的,帶寬消耗,而且做起來的不可擴展的方式。它每隔X秒向服務器發送一次新數據請求。這意味着每X秒*一次數據庫查詢number_of_connected_users。

反向Ajax和它的一個應用程序(comet)需要定製的Web服務器或專門的Comet服務器,它可以處理number_of_connected_users數量的長時間http連接。

我的實際服務器是:1個Xeon CPU,1 GB RAM和1 Gb/s帶寬。該服務器是一個虛擬機(因此具有高度可擴展性)。

我需要一個能夠隨着服務器和未來不斷增長的用戶羣擴展的解決方案。

我的疑惑是:

  • 多少阿賈克斯輪詢方法可能會影響我的帶寬使用情況?

  • 以哪種方式可以優化ajax輪詢以僅在必要時進行數據庫查詢?

  • 彗星服務器可以運行在Web服務器(Apache)的同一臺計算機上嗎?

  • 用彗星的方式,我仍然需要一個間隔來做數據庫上的查詢然後發送響應,那麼實時在哪裏?

  • 與我的實際服務器,彗星的方式可以工作?

在此先感謝您。

回答

1

如果您可以避開它,您絕不應該使用輪詢。它堵塞了服務器和客戶端上的資源。服務器必須通過輪詢發出更多的數據庫請求,並進行更多的檢查以查看數據是否已更改。

ajax輪詢方法也會產生更多不需要的請求。通過輪詢,您可以使用內存和CPU。彗星(如果它正確完成)只使用記憶。

彗星服務器可能無法在Apache下運行。 Apache似乎並不適用於長時間運行的請求。我建議在Python中使用EventMachine(使用EventMachine)an example來實現您的comet服務器,使用Python(使用Twisted)或使用C。

我不明白爲什麼需要有間隔來執行數據庫查詢。當你做出改變時,你可以告訴你的彗星服務器通知需要改變的用戶。

0

我正在用PHP寫我的網站。

所以,我需要運行一個服務器(如扭曲),並在python中寫我的聊天應用程序? 這個應用程序應該照顧傳入的ajax請求並將新數據推送到客戶端。

如果我理解的很好,這種方法不需要數據庫,對吧?

+0

這是正確的。 Apache的問題在於它不支持長時間運行的請求,因爲它遵循每個請求的線程範例。這將在多個連接下斷開。 – Maz 2010-07-02 23:12:46