WebSockets与XHR进行数据传输

时间:2016-08-09 02:54:14

标签: javascript node.js xmlhttprequest

我正在使用Node.js为Web应用程序设计架构,我们需要能够从库中将中等大小的文件发送到客户端。当用户浏览图库时,他们将尽快发送这些二进制文件(对于每个图库项目)。这些文件最高可达6Mb,但可能平均大约为2Mb。

我的客户坚持要使用websockets进行数据传输而不是XHR。需要明确的是,我们不需要双向通信。

我缺乏这个领域的经验,在我的推理中需要帮助。 到目前为止,我的观点如下:

  • 使用WebSockets会破坏HTTP提供的任何客户端缓存。如果用户两次访问图库中的相同项目,则会被迫重新下载内容。
  • 无法通过/路由到代理缓存来处理WebSocket消息。它们必须始终由显式服务器处理。
  • CDN旨在提供广泛的Web缓存,拦截HTTP请求。 WebSockets限制我们利用CDN。
  • 我猜Nodejs能够比并发websocket连接更快地响应数百/数千XHR。

是否存在使用websockets进行标准HTTPRequests纯数据传输的技术参数。任何人都可以取消/澄清我的观点,也许可以提供链接来帮助我的研究吗?

我发现此链接非常有用:https://www.mnot.net/cache_docs/#PROXY

1 个答案:

答案 0 :(得分:6)

除了我使用HTTP之外,我还可以看到XHR的以下技术参数,因此它更适合缓存(这对速度至关重要):

  • HTTP是文件下载的专用协议。它原生内置于浏览器中(带有XHR接口),因此可以更好地优化并更易于开发人员使用
  • HTTP已经具备了许多用于手工制作webpack所需的东西,比如文件路径请求,身份验证,会话,缓存......所有这些都在客户端和服务器端。
  • 即使在较旧的浏览器中,XHR也能提供更好的支持
  • 某些防火墙仅允许HTTP(S)连接

似乎没有任何技术理由喜欢网络套接字 - 唯一可能影响您选择的是“客户为王”。您可以通过告诉他他需要多少钱来重新实现websocket连接上的HTTP功能来说服他。它并不便宜,特别是当你的应用程序变得更复杂时。

是的,我不会支持你的最后一点。 Node应该能够处理与HTTP连接一样多的websocket连接;如果适当优化,所有事情都是均匀的但是,如果您的服务器体系结构不仅仅基于节点,那么有许多普通文件服务应用程序可能比节点更快(甚至不计算HTTP缓存层)。