2011-04-04 22 views
8

我在兩端使用node.js構建文件同步程序(與Dropbox不同)。我需要有數以千計的客戶端同時請求數據。HTTP vs Websockets相對於開銷

這是我目前的系統:

  • 服務器推送通知客戶在網頁套接字(文件已更新)
  • 客戶隊列下載併發出HTTP請求時空閒

我將以每個50 MB的壓縮塊爲單位提供數據,因此HTTP請求開銷(標頭)可以忽略不計。

如果我使用的請求推送通知的WebSockets,會有:

  • 注意的整體運行速度提升? (減少延遲,身份驗證等)
  • 服務器上的其他開銷保持連接打開?
  • 推送二進制數據的問題?

我覺得我需要有送過一個專門的WebSocket通知,因爲我不想讓他們在服務器上同時下載正在發生(大量的開銷)進行排隊做。

注意:只要客戶端系統處於打開狀態,這些websockets就會長期開放。

編輯:我將使用不同端口上的不同http服務器上的websockets,以將它們移動到不同的CPU核心。我可能有成千上萬的(如果不是幾十萬)併發的WebSockets開放的...

+0

「在兩端使用node.js」 - 所以客戶端和服務器都安裝了node.js?客戶端不會是一個瀏覽器,例如? – yojimbo87 2011-04-04 09:21:37

+0

是的,沒有瀏覽器。我將完全控制請求和響應。這將是一個在後臺運行的桌面應用程序。簡單的HTTP服務器,簡單的HTTP客戶端。 – tjameson 2011-04-04 14:49:18

回答

5

如果您打算爲客戶端和服務器使用node.js,那麼您應該使用純套接字而不是WebSockets的本地net模塊。純套接字更適合數據傳輸,特別是二進制。據我所知瀏覽器WebSockets甚至不支持二進制傳輸。

+1

我得看看。是否有任何統計數據或比較兩個等效服務器在高負載下的基準? – tjameson 2011-04-05 16:49:09

+0

我不介紹任何比較純套接字和WebSocket的基準測試,但最近在這個話題上還有一個類似的[question](http://stackoverflow.com/questions/5509905/websockets-between-2-servers)。 – yojimbo87 2011-04-05 18:41:41

+0

是的,有一些相當不錯的庫,例如[socket.io-node](https://github.com/LearnBoost/Socket.IO-node)。如果沒有人發佈任何基準或比您的答案更完整的東西,我可能會將您的標記標記爲正確。 – tjameson 2011-04-05 18:46:27

1

我四處尋找別的東西,我發現這個職位,說明WebSockets的非常好:

http://blog.new-bamboo.co.uk/2009/12/7/real-time-online-activity-monitor-example-with-node-js-and-websocket

這篇文章中有一些非常有趣的部分:

與現有解決方案相比,Websocket使您能夠以更少的網絡開銷進行連續通信。

和:

在製作每幀是每2個字節的WebSocket,客戶端和服務器交換數據連接,相對於8千字節的HTTP標頭的當你連續輪詢。

對於我的用例(沒有瀏覽器),這似乎是最佳的解決方案!現在我只需要決定我是否想爲每個客戶端提供一個websocket或多個websocket(此時我傾向於單個websocket)。

我真的希望這對某人有用。我會暫時把它打開。本週晚些時候我將參加一個JS會議,如果我學到更多東西,我會添加到這篇文章中。

對於那些關心瀏覽器支持的人,請參閱this。它看起來像WebKit是唯一支持它的可靠引擎(Chrome和Safari)。

+0

嗨tjameson,關於文件傳輸項目的web-socket實現,你做得很好嗎? 我即將在服務器端和客戶端開始在Python中實現類似的項目。 實際上,在websockets中使用它是否是一種很好的做法,或者我應該只將它用於消息傳遞,並使用HTTP完成文件傳輸部分?讓我從你的經歷中瞭解你的想法。謝謝。 – securecurve 2012-12-27 16:08:58

+0

由於您使用的是Python,我只能假設您想要一些簡單而快速的HTTP,它提供了一個很好的結構並得到很好的支持。對於數據非常小的Arduino項目,我實現了WebSocket協議,而不需要HTTP握手。這非常簡單(一個字節的頭部,1-8個字節的消息長度),HTTP在Arduino上很難。如果您需要原始速度,請仔細研究,否則只需堅持使用HTTP,直至遇到問題。 – tjameson 2012-12-27 23:56:59