HTTP vs Websockets相对于开销

我正在build立一个文件同步程序(不像Dropbox)在两端使用node.js。 我需要有数以千计的客户端同时请求数据。

这是我目前的系统:

  • 服务器通过websocket将通知推送给客户端(文件已更新)
  • 客户端队列下载并在空闲时发出HTTP请求

我将以每个50 MB的压缩块为单位提供数据,所以HTTP请求开销(标题)可以忽略不计。

如果我使用websockets进行请求推送通知,是否会有:

  • 显着的整体速度改善? (减less延迟,authentication等)
  • 服务器上的额外开销,以保持连接打开?
  • 推送二进制数据的问题?

我想我需要通过一个专门的websocket发送通知,因为我不希望它们在服务器上排队,而下载正在发生(大量的开销)。

注意: 只要客户端系统处于打开状态,这些websocket就会长期打开。

编辑:我将使用不同的端口上的不同的HTTP服务器上的WebSockets,以便将它们移动到不同的CPU核心。 我可能有成千上万(如果不是几十万)的并发websocket打开…

如果您打算为客户端和服务器使用node.js,那么您应该使用纯套接字而不是WebSockets使用本地networking模块。 纯套接字更适合数据传输,特别是二进制。 据我所知浏览器WebSockets甚至不支持二进制传输。

我正在寻找其他的东西,我发现这个post很好地解释了websockets:

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

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

与现有的解决scheme相比,Websocket使您能够以更less的networking开销进行连续通信。

和:

在与WebSocketbuild立连接的过程中,客户端和服务器之间交换每帧2个字节的数据,而在进行连续轮询时,与8千字节的http头相比。

对于我的用例(没有浏览器),这似乎是最佳的解决scheme! 现在我只需要决定是否要为每个客户端提供一个websocket或多个websocket(我现在倾向于单个websocket)。

我真的希望这对某个人有用。 我暂时把这个打开 我将在本周晚些时候参加一个JS会议,如果我学到更多的东西,我会添加到这个职位。

对于那些关心浏览器支持的人,看看这个 。 看起来WebKit是唯一支持它的可靠引擎(Chrome和Safari)。