2010-06-04 123 views
8

我需要創建一個像Facebook聊天一樣的聊天。彗星VS Ajax輪詢

彗星我需要更多的內存來保持連接。

如果我每3-4秒發送一次請求,使用Ajax輪詢就會出現延遲問題。

因此......如果延遲(3-4秒)無關緊要,Ajax Polling對我的情況更好嗎?

+1

我想你只是回答了你自己的問題:) – 2010-06-04 15:02:11

回答

1

如果延遲不是問題,那麼AJAX可能會更好。如果你不是非常非常小心的話,Comet可能會遇到在同一個客戶端/服務器對之間維持多個連接的問題。 (Ref)

6

延遲並不是唯一的問題。 COMET(長輪詢)「保存」您的流量 - 當您使用輪詢時,您無法知道服務器是否發生變化,因此某些呼叫可能僅僅是浪費流量和資源(例如,即使沒有人聊天,你每3-4秒打一次電話)。在COMET的情況下,您通常只需要打一個電話即可從服務器獲取更新(命中率100%)。

+2

但與彗星,我需要更多的記憶,以保持打開連接...不? – xRobot 2010-06-07 16:06:34

+1

保持連接本身並沒有那麼有害。內存消耗更多取決於您選擇的服務器端IO API - 阻塞還是非阻塞。如果您選擇阻塞API,則每個連接都會有一個線程 - > 3-4k打開連接時出現內存問題。如果您選擇非阻塞API(幾乎每個應用程序服務器都具有NIO功能),則可以保留數百萬個打開的連接。 – 2010-06-07 16:46:47

+1

你可能會發現這個有趣的 - http://iobound.com/2008/11/comet-nio/ – 2010-06-07 22:58:26

2

@Vasil: 「你可以保持數百萬打開的連接」

看看to this problem

而且隨着IO關於NIO的the false superiority

iobound文章顯示IO優於NIO,yes IO在NIO之前內存不足(順便說一下,作者還沒有試圖用較低的值減少堆棧內存)。