2009-08-02 100 views
34

只是好奇。在瀏覽器中聊天的工作原理是什麼?通常,如果用戶轉到網頁,他/她的瀏覽器會請求頁面內容。服務器產生輸出並將其發送到用戶的計算機。但與聊天有點相反(很不完全)。這不是用戶從某個服務器請求聊天消息,而是直接發送它的服務器。現在,使用「普通」服務器實現起來非常簡單,但服務器直接將其發送到瀏覽器會讓我感到困惑。發佈消息部分很清楚,很簡單。您只需將數據發佈到服務器,例如ajax或其他。但是另一臺計算機如何「立即」知道已經寫入了一條消息?一旦寫入服務器,它顯然應該是服務器發送給另一臺計算機的服務器。但不知何故,這不在我腦中計算。在我的大腦中,瀏覽器只需要請求一些東西,它並不僅僅是獲取它們。你究竟如何做到這一點?瀏覽器內聊天如何工作?

以gmail中的google talk爲例。這是如何運作的?它是如何實現的?

回答

11

有一些push technologies,如Comet,但它們沒有廣泛實施。大多數情況下,這是通過polling與AJAX以一定的時間間隔完成並下載自上次下載的消息以來可用的新消息。

+0

這使得感覺,這就是我認爲它的工作原理。 AJAX請求的時間間隔很小。然而,研究谷歌談話是如何工作的(使用螢火蟲),我發現當一個朋友給我發信息時,我的電腦沒有提出任何請求,而是顯示了信息。 – quano 2009-08-02 19:00:25

+0

您通常可以強制它在保持長時間連接的情況下工作,並且每隔一段時間將一條消息沿管道向下滴流。你必須處理超時,然後重新建立連接。 – Joey 2009-08-02 19:02:27

2

它採用AJAX - 上的Gmail用戶的瀏覽器的JavaScript運行的客戶端發送和從谷歌服務器接收郵件,並將其寫入到瀏覽器窗口 - 沒有重裝需要頁面。

4

Orbited是一個很好的實現方法,它使用了彗星方法。你可以找到一個教程here

有人提到阿賈克斯輪詢,但comet is always better than polling。那麼,這只是一個聳人聽聞的標題,但是彗星肯定更合適,並且可以減少服務器端的壓力,並減少右後端的負擔。

0

現代聊天應用程序使用SSE的(服務器發送事件:HTML5的功能)發送新郵件到瀏覽器