首页 文章

关于开销的HTTP与Websockets

提问于
浏览
8

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

这是我目前的系统:

  • Server通过websocket将通知推送到客户端(文件已更新)

  • 客户端队列在空闲时下载并发出HTTP请求

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

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

  • 明显的整体速度提升? (减少延迟,身份验证等)

  • 服务器上的额外开销是否保持连接打开?

  • 推送二进制数据的问题?

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

注意: These websockets will be open long-term, as long as the client's system is on.

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

2 回答

  • 5

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

  • 2

    我正在寻找别的东西,我发现这篇文章很好地解释了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(此时我倾向于单个websocket) .

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

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

相关问题