当WebSocket可用时,为什么使用Ajax?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我使用WebSocket已经有一段时间了,我选择使用Node服务器和WebSocket为我在大学的最后一年项目创建一个敏捷项目管理工具。我发现使用WebSocket可以使我的应用程序每秒处理的请求数增加624%。

然而,自从项目启动以来,我就读到了一些漏洞,一些浏览器默认选择禁用WebSocket。

这就引出了一个问题:

当WebSocket似乎在降低延迟和资源开销方面做得这么好时,为什么使用Ajax呢?还有比WebSocket更好的Ajax吗?

提问于
用户回答回答于

WebSocket并不打算取代Ajax,严格来说,它甚至不是Comet/Long-轮询的替代品(尽管在许多情况下,这是合理的)。

WebSocket的目是在浏览器和服务器之间提供低延迟、双向、全双工和长时间运行的连接。WebSocket为浏览器应用程序开辟了新的应用领域,而这些应用程序实际上并不可能使用HTTP和Ajax(交互游戏、动态媒体流、连接现有网络协议等)。

然而,WebSocket和Ajax/Comet之间的目的肯定是重叠的。例如,当浏览器希望得到服务器事件(即推送)的通知时,Comet技术和WebSocket无疑都是可行的选择。如果应用程序需要低延迟的推送事件,那么这将是一个有利于WebSocket的因素。另一方面,如果需要与现有的框架和部署的技术(OAuth、RESTfulAPI、代理、负载平衡器)共存,那么这将是支持Comet技术的一个因素(目前而言)。

如果不需要WebSocket提供的特定好处,那么坚持使用现有的技术(如Ajax和Comet)可能是一个更好的主意,因为这允许重用和集成现有的巨大的工具、技术和安全机制生态系统。知识库(即在堆栈溢出上知道HTTP/Ajax/Comet的人远远多于WebSocket),等等。

另一方面,如果你正在创建一个在HTTP/Ajax/Comet的延迟和连接约束范围内不能很好工作的新应用程序,那么请考虑使用WebSocket。

用户回答回答于

除了旧版浏览器(包括IE9,因为从IE10开始将支持WebSockets)的问题以外,尚未支持WebSockets的代理仍然存在很大问题,包括透明代理,反向代理和负载平衡器。有一些移动运营商完全阻止了WebSocket流量(也就是在HTTP UPGRADE命令之后)。

随着时间的推移,WebSockets将会得到越来越多的支持,但同时你应该总是有一个基于HTTP的备用方法来向浏览器发送数据。

扫码关注云+社区