2012-04-15 140 views
21

我收到了一個實現broadcast.emit的網站。向該網站的所有用戶發送消息。這只是socket.io的最簡單實現,但我目前遇到問題。當我碰到大約100個併發用戶時。 nodejs服務器開始滯後,直到它掛起,我不能再訪問我的整個網站。當我們檢查服務器時。 nodejs佔用了CPU的100%。這是正常的嗎?Nodejs&Socket.io可以支持多少用戶?

我想知道有多少用戶可以socket.io支持?當發生這種情況時,是否有一種方法可以以編程方式重新啓動nodejs服務器?

+1

你能給我們一些關於服務器規格的信息嗎? – UpTheCreek 2012-09-14 20:41:48

回答

15

At least 250k併發連接(對於大多數使用情況的瓶頸是內存)

+0

謝謝安德烈。其實在服務器內存中沒有問題。它使用的服務器內存少於5%。此外,我忘了提及nodejs與我的web&db服務器在同一個框中。 – 3s2ng 2012-04-15 16:32:08

+11

上面引用的250k是一個HelloWorld類型的基準,沒有socket.io。實際上,c10k接近真實(取決於您的CPU和應用程序的複雜性)。例如,對於我正在運行的紙牌遊戲,我在c3k時的CPU使用率達到了100%。 – 2012-09-12 12:24:22

+1

1m併發連接 - http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/ – 2012-09-13 00:20:33

3

它是至關重要的,您不必放棄它傳遞消息給所有的客戶端?如果不是,我會建議使用socket.volatile.emit調用。遠程客戶端和非穩定連接可能存在很多問題。

+0

傳遞給客戶的信息很重要。因此,所有用戶的數據應始終同步更新。如果我要使用volatile,那意味着如果用戶失去連接,用戶將不會收到消息。隨後他們會有機會收到最新的消息嗎?使用易失性的任何其他缺點? – 3s2ng 2012-04-16 06:24:40

+2

當發送當前消息數據替換客戶端上的先前數據(即,使通過相同呼叫發送的先前消息過時)時,我會使用'socket.volatile.emit'。 – 2012-08-22 20:52:19

18

我有一個多人紙牌遊戲。 Socket.io使我的CPU在大約3000個併發用戶中最大化。這是Intel i7 CPU。因此,我必須運行多個node/socket.io進程來處理負載。

對於100個併發連接,你應該沒問題。也許你正在使用一些VPS並且CPU與所有其他VM共享?你運行專用服務器嗎?

此外,請檢查您的代碼。你可能會同步做一些應該異步的東西。

+0

如果您要使用集羣模塊並使用更多核心,那麼這個數字會增加嗎?還是你已經在使用集羣模塊? – 2013-01-31 07:05:53

+8

目前,我使用HAProxy作爲前端運行7個節點進程。大約有9000個併發用戶(每個節點約1300個),一切正常。全部在一臺服務器上。 – 2013-01-31 11:39:21

+0

很高興知道,謝謝你的回覆。 – 2013-02-01 14:40:01

相關問題