8

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

这是我目前的系统:

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

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

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

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

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

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

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

4

2 回答 2

5

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

于 2011-04-05T08:36:33.583 回答
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 个字节,而在进行连续轮询时,http 标头为 8 千字节。

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

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

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

于 2011-04-05T05:29:35.817 回答