WebSockets和XHR在数据传输方面的区别

7

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

我的客户坚持认为,我们应该使用WebSockets而不是XHR进行数据传输。只要明确了,我们不需要双向通信。

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

  • 使用WebSockets会破坏HTTP提供的任何客户端缓存。如果用户两次访问相同的图库项目,他们将被迫重新下载内容。
  • WebSocket消息不能被代理缓存处理/路由。它们必须始终由显式服务器处理。
  • CDN是专门提供广泛的Web缓存,拦截HTTP请求。WebSockets会限制我们利用CDN。
  • 我想Node.js会能够更快地响应数百/数千个XHR,而不是并发的websocket连接。

对于仅进行纯数据传输的技术上是否有使用WebSockets的支持或反对的论点?任何人能够否定/澄清我的观点,或提供帮助我研究的链接吗?

我发现这个链接非常有帮助:https://www.mnot.net/cache_docs/#PROXY


这些到底是什么类型的文件,这些文件有什么用途。看起来通过Websockets随机向用户浏览器发送文件是一个奇怪的要求。 - adeneo
除了“客户总是正确”的原则外,似乎没有理由使用Web套接字来下载文件。实际上,如果您只想显示图像而不进行任何特殊操作,甚至不需要使用XHR。 - Bergi
数据文件将是用于3D资产存储的二进制编码几何体。 - Philip Taylor
1个回答

9

以下是我能想到的XHR技术方面的一些理由,除了它使用HTTP并且因此更适合缓存(这对于速度至关重要):

  • HTTP是文件下载的专用协议。它已经内置于浏览器中(使用XHR接口),因此对开发人员来说更好优化和更易于使用
  • HTTP已经包含了许多你需要手动构建的WebSockets功能,如文件路径请求、身份验证、会话、缓存...所有这些都在客户端和服务器端。
  • XHR即使在旧版浏览器中也有更好的支持
  • 一些防火墙只允许HTTP(S)连接

似乎没有任何技术原因优先选择WebSockets - 唯一可能影响您选择的是"客户为王"。不过,您可以通过告诉客户重新实现WebSocket连接上的HTTP功能需要支付多少费用来说服他。这并不便宜,特别是当应用程序变得更加复杂时。

顺便说一句,我不支持你的最后一点。Node应该能够处理与HTTP连接一样多的WebSocket连接;如果正确优化,所有事情都是平等的。但是,如果你的服务器架构不仅仅基于node,那么有许多纯文件服务应用程序可能比node更快(甚至不计算HTTP缓存层)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接