Jac*_*ack 196 ajax performance websocket node.js
我已经使用WebSockets一段时间了,我选择使用Node服务器和WebSockets为大学的最后一年项目创建一个敏捷项目管理工具.我发现使用WebSockets提供的应用程序每秒可处理的请求数量增加了624%.
然而,自从启动项目以来,我已经阅读了安全漏洞,并且一些浏览器默认选择禁用WebSockets.
这引出了我的问题:
当WebSockets似乎在降低延迟和资源开销方面做得如此出色时,为什么要使用AJAX?AJAX比WebSockets做得更好吗?
kan*_*aka 204
WebSockets并不是要取代AJAX,也不是Comet/long-poll的替代品(尽管有很多情况下这是有意义的).
WebSockets的目的是在浏览器和服务器之间提供低延迟,双向,全双工和长时间运行的连接.WebSockets为浏览器应用程序开辟了新的应用程序域,这些应用程序使用HTTP和AJAX(交互式游戏,动态媒体流,桥接到现有网络协议等)实际上是不可能的.
但是,WebSockets和AJAX/Comet之间的目的肯定存在重叠.例如,当浏览器想要获得服务器事件(即推送)的通知时,Comet技术和WebSockets肯定都是可行的选择.如果您的应用程序需要低延迟推送事件,那么这将是支持WebSockets的一个因素.另一方面,如果您需要与现有框架和已部署的技术(OAuth,RESTful API,代理,负载平衡器)共存,那么这将是支持Comet技术的一个因素(目前).
如果您不需要WebSockets提供的特定优势,那么坚持使用AJAX和Comet等现有技术可能是一个更好的主意,因为这可以让您重复使用并与现有的大型工具,技术,安全机制生态系统集成,知识库(即stackoverflow上的人们比WebSockets更了解HTTP/Ajax/Comet)等.
另一方面,如果您要创建一个在HTTP/Ajax/Comet的延迟和连接限制内无法正常工作的新应用程序,请考虑使用WebSockets.
此外,一些答案表明WebSockets的缺点之一是有限/混合服务器和浏览器支持.让我稍稍分散一下.虽然iOS(iPhone,iPad)仍然支持旧协议(Hixie),但大多数WebSockets服务器都支持Hixie和HyBi/IETF 6455版本.大多数其他平台(如果它们还没有内置支持)可以通过web-socket-js(基于Flash的polyfill)获得WebSockets支持.这涵盖了绝大多数网络用户.此外,如果您使用Node作为服务器后端,那么考虑使用Socket.IO,其中包括web-socket-js作为后备,如果即使不可用(或禁用),那么它将回退到使用任何Comet技术是可用于给定的浏览器.
更新:iOS 6现在支持当前的HyBi/IETF 6455标准.
Mys*_*yst 58
快进到2017年12月,Websockets(实际上)支持每个浏览器,它们的使用非常普遍.
但是,这并不意味着Websockets设法取代AJAX,至少不完全,尤其是当HTTP/2适应正在增加时.
简而言之,即使使用Websockets,AJAX仍然适用于大多数REST应用程序.但上帝在细节中,所以...:
使用AJAX进行轮询(或长轮询)正在消失(它应该是),但它仍然在使用中有两个很好的理由(主要针对较小的Web应用程序):
对于许多开发人员来说,AJAX更容易编码,特别是在编码和设计后端时.
使用HTTP/2,消除了与AJAX(建立新连接)相关的最高成本,允许AJAX调用非常高效,特别是对于发布和上传数据.
但是,Websocket推送远远优于AJAX(无需重新验证或重新发送标头,不需要"无数据"往返等).这已被讨论了很多次.
更好地使用AJAX是REST API调用.此用法简化了代码库并防止Websocket连接阻塞(特别是在中型数据上传中).
有许多令人信服的理由喜欢使用AJAX进行REST API调用和数据上传:
AJAX API实际上是为REST API调用而设计的,非常适合.
使用AJAX的REST调用和上传在客户端和后端都非常容易编码.
随着数据有效负载的增加,Websocket连接可能会被阻止,除非对消息碎片/多路复用逻辑进行编码.
如果在单个Websocket send调用中执行上载,它可能会阻止Websocket流,直到上载完成.这会降低性能,尤其是在较慢的客户端上.
常见的设计使用通过Websockets传输的小型bidi消息,而REST和数据上传(客户端到服务器)利用AJAX的易用性来防止Websocket阻塞.
但是,在大型项目中,Websockets提供的灵活性以及代码复杂性和资源管理之间的平衡将有利于Websockets.
例如,基于Websocket的上传可以提供在连接被删除和重新建立后恢复大型上传的能力(还记得你要上传的5GB电影吗?).
通过对上传碎片逻辑进行编码,可以轻松恢复中断的上传(困难的部分就是对事物进行编码).
我应该补充一点,HTTP/2推送功能不会(也可能不会)替换Websockets.
这在前面已经讨论过了,但足以提到单个HTTP/2连接服务于整个浏览器(所有选项卡/窗口),因此HTTP/2推送的数据不知道它属于哪个选项卡/窗口,消除它取代Websocket将数据直接推送到特定浏览器选项卡/窗口的能力.
虽然Websockets非常适合小型双向数据通信,但AJAX仍然具有许多优势 - 特别是在考虑更大的有效载荷(上传等)时.
嗯,一般来说,为程序员提供的信任和控制越多,工具就越强大......而且越多的安全问题就越多.
AJAX本质上具有优势,因为它的安全性内置于浏览器的代码中(有时候会有问题,但它仍然存在).
另一方面,AJAX调用更容易受到"中间人"攻击,而Websockets安全问题通常是引入安全漏洞的应用程序代码中的错误(通常后端验证逻辑是您可以找到它们的地方).
就个人而言,我并不觉得这有什么大不同,如果有什么我认为Websockets稍微好一些,特别是当你知道你在做什么的时候.
恕我直言,除了REST API调用,我还会使用Websockets.大数据上传我会在可能的情况下分段并通过Websockets发送.
民意调查,恕我直言,应该是非法的,网络流量的成本是可怕的,Websocket推送很容易管理,即使是新开发人员.
Ale*_*one 17
除了旧版浏览器的问题(包括IE9,因为从IE10开始支持WebSockets),网络中介还没有支持WebSockets的问题,包括透明代理,反向代理和负载均衡器.有些移动运营商完全阻止了WebSocket流量(即在HTTP UPGRADE命令之后).
随着时间的推移,WebSockets将得到越来越多的支持,但与此同时,您应始终使用基于HTTP的回退方法将数据发送到浏览器.
Tim*_*ith 16
我读到的关于websockets和安全性的大多数抱怨来自Web浏览器安全和防火墙安全工具的安全供应商.问题是他们不知道如何对websockets流量进行安全性分析,因为一旦完成从HTTP到websocket二进制协议的升级,数据包内容及其含义就是特定于应用程序(基于您编程的任何内容).这显然是这些公司的后勤噩梦,这些公司的生计基于对所有互联网流量进行分析和分类.:)
| 归档时间: | 
 | 
| 查看次数: | 80927 次 | 
| 最近记录: |