关于开销的HTTP与Websockets

bea*_*mit 8 optimization websocket node.js overhead-minimization

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

这是我目前的系统:

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

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

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

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

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

注意:只要客户端的系统处于打开状态,这些websockets将是长期打开的.

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

yoj*_*o87 5

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

  • 为了明确未来的观众,websocket _does_支持二进制传输,但javascript没有二进制类型,这使得通过websocket将二进制数据传输到浏览器是不可能的,但是可以使用websocket和不同的客户端来传输websockets.见:http://dev.w3.org/html5/websockets/ (4认同)