关于开销的HTTP与Websockets

时间:2011-04-04 06:31:17

标签: optimization node.js websocket overhead-minimization

我正在使用两端的node.js构建文件同步程序(与Dropbox不同)。我需要有数千个客户同时请求数据。

这是我目前的系统:

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

我将以压缩块的形式提供数据,例如每个50 MB,因此HTTP请求开销(标头)可以忽略不计。

如果我要将websockets用于请求推送通知,那么会有:

  • 明显的整体速度提升? (减少延迟,身份验证等)
  • 服务器上的额外开销是否保持连接打开?
  • 推送二进制数据的问题?

我认为我需要通过专用的websocket发送通知,因为我不希望它们在下载过程中在服务器上排队(大量开销)。

注意:只要客户的系统处于启用状态,这些网页框就会长期打开。

编辑:我将在不同端口上的不同http服务器上使用websockets,以便将它们移动到不同的CPU核心。我可能会有数千个(如果不是数十万个)并发的websockets打开......

2 个答案:

答案 0 :(得分:5)

如果您打算将node.js用于客户端和服务器,那么您应该使用带有纯套接字而不是WebSockets的本机net模块。纯插槽针对数据传输进行了更好的优化,特别是二进制。据我所知,浏览器WebSockets甚至还不支持二进制传输。

答案 1 :(得分:3)

我正在寻找别的东西,我发现这篇帖子很好地解释了websockets:

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

以下是文章中一些非常有趣的部分:

  

与现有解决方案相比,Websocket使您能够以更少的网络开销进行连续通信。

  

在与WebSocket建立连接期间,客户端和服务器每帧交换2个字节的数据,而连续轮询时则为8千字节的http报头。

对于我的用例(没有浏览器),这似乎是最佳解决方案!现在我只需要决定是否要为每个客户端设置一个websocket或多个websockets(此时我只倾向于一个)。

我真的希望这对某人有用。我将暂时保持开放状态。我将在本周晚些时候参加一个JS会议,如果我学到更多东西,我将添加到这篇文章中。

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