2012-05-20 147 views
1

我期待創建一個網站,允許用戶創建組,然後在這些組中聊天/發佈。但是,當在一個羣組中發佈帖​​子/聊天時,我不希望用戶必須重新加載頁面才能查看該羣組中的這些新帖子/聊天內容。我的問題歸結爲:如何做到這一點(語言,Web服務等)的最佳意見是什麼?我很熟悉PHP,SQL,HTML和CSS,並且知道XML,Javascript,AJAX不太好(我已經遇到過它們足以閱讀代碼並知道它們是如何工作的,但我絕不是熟練的或有信心的他們,我覺得我需要閱讀一本/所有這些書來建立我描述的網站。)沒有重新加載的聊天客戶端/帖子頁面

任何和所有的輸入將不勝感激。

+2

[Stack Overflow不是您的個人研究助理](http://meta.stackexchange.com/a/128553/177538)和[您嘗試過什麼?](http:// mattgemmell.com/2008/12/08/what-have-you-tried/) – Joseph

+0

你可以嘗試[糖果](http://candy-chat.github.com/candy/)。但它沒有創建組。您可以使用xmpp聊天服務器(如ejabberd或Openfire)對其進行配置。 –

+1

另外我建議長時間輪詢如果你開發一個使用php/ajax –

回答

3

Web在處理典型的請求/響應模型方面做得很好,客戶端發出請求並且服務器響應資源。但是,當涉及到服務器必須向客戶端發送數據而沒有客戶端請求數據的應用程序時,這就是我們必須具有創造性的地方。

可以使用幾種不同的方法來實現基於Web的實時應用程序。

投票:

輪詢涉及客戶定期,以接收更新發出請求到服務器。這種方法存在兩個主要問題:首先,服務器可能沒有任何數據推動很長時間。因此,大量的帶寬可能會浪費,繼續輪詢服務器的更新。其次,投票率決定了應用程序的實時感受。雖然快速輪詢速度會使更新更快顯示,但浪費帶寬。相反,較長間隔的輪詢使用較少的帶寬,但缺點是更新不會很快出現。

在一般情況下,這是一個非常貧窮的解決方案在新的一年使用聊天應用2012

彗星/反向AJAX:

彗星是已在成功使用的技術最近5年採用請求/響應的概念並使用黑客來模擬實時效果。 Comet背後的一般理念是客戶端向服務器發出請求,服務器將無限期地打開連接。服務器一直等到有更新發送給客戶端。一旦更新準備就緒,服務器將發送響應,該響應模擬向客戶端發出請求的服務器。一旦客戶端收到響應,它會打開一個新的連接,並重復該過程。

當與延續相結合時,該技術已被證明在某些平臺上擴展到20,000多個同時連接,確保等待線程被釋放用於其他任務。

這不僅節省了帶寬,而且使應用程序感覺非常實時。

的WebSockets:

的WebSockets在HTML5引入作爲彗星的替代品,使用WS://協議而非http。然而,這還沒有被所有瀏覽器廠商廣泛採用,並且可能仍然存在關於協議規範的討論。它具有許多與Comet相同的優點。


有關彗星的更多信息,請Comet and PHPthe challenges of Comet in PHP。對於客戶端集成,請查看the Dojo Cometd Library

+0

'但是,當在一個組內發佈帖子/聊天時,我不希望用戶不得不重新加載頁面以查看該組內的這些新帖子/聊天。我的問題歸結爲:如何做到這一點(語言,Web服務等)的最佳見解是什麼?'。彗星或Websockets就是答案。這就是整個問題的答案,以及爲什麼不應該使用輪詢解決方案。 – jmort253

-1

我會說AJAX是這樣做的最好方法。或者,創建一個重新加載的iframe

+0

這兩種解決方案實質上都涉及輪詢,這些解決方案並不是最好,最有效,也是最現代的解決此問題的方法。 – jmort253

+0

他不問這個。他要求如何解決這個問題。請刪除您的downvote到有效答案 – Ben

+0

您沒有提到有效的解決方案。如果你爲此使用AJAX,你將需要持續輪詢,這不是一個好的解決方案。 (另外,你不應該假設誰低估了你,這不是我,我今天沒有票了。) – jmort253