2009-07-27 99 views
1

舉例:發送數據到瀏覽器

說,我有一個AJAX聊天在人們可以互相交談的頁面上。 如何在人們聊天時打開(發送)人員A發送的信息給人員B,C和D?

據我所知,技術上它有點不同:聊天(ajax)從數據庫(或其他來源)讀取數據,每秒鐘查看是否有新消息要顯示。

但是我想知道是否有一種方法可以在發送新消息的時候發送給其他人,而不是每秒鐘以1000s讀取數據。

請注意,AJAX聊天的例子只是一個例子來解釋我想要什麼,而不是我想要實現的。我只需要知道是否有一種方法讓所有打開的瀏覽器在特定頁面(ajax)上顯示應收集的服務器上有新內容。

{對不起我的英語}

+0

這個問題需要一個更好的標題,但我不能認爲它應該是什麼。 – 2009-07-27 20:34:03

回答

2

因爲服務器不能沒有相應的請求的響應客戶端,你需要保持狀態,爲每個用戶的排隊信息。但是,這正是數據庫完成的。你不能通過用不同的方式完成同樣的事情來替代數據庫來解決這個問題。這就是說,你當然可以做到最優化。但請記住,你不應該過早地優化這種情況;數據庫旨在處理極高的流量,並且極有可能(並且事實上很可能)所描述的場景將被開箱即用的數據庫處理得很好。

1

您所描述的內容通常被稱爲'Comet'概念。有關詳細信息,請參閱維基百科文章,特別是實施選項(長輪詢等)。

0

另一個答案是讓服務器將更改推送到連接的客戶端,這樣只有一個對數據庫的調用,然後服務器將更改推送給所有客戶端。這article表明這是可能的,但我從來沒有嘗試過這一點。

0

這是非常基本的,但如果你想堅持使用標準的AJAX解決方案,當輪詢時減少服務器負載的簡單方法是獲得AJAX調用以轉發最後收集的該客戶端的評論ID--你然後在服務器端的查找查詢中使用它(通過適當的轉義),以確保您只返回新評論。