WebSockets与XHR进行数据传输

Phi*_*lor 6 javascript xmlhttprequest node.js

我正在使用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

Ber*_*rgi 7

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

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

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

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