对于服务器与客户端的双向通信,WebSocket 简直是不二之选。如果不是还有少数旧版浏览器尚在服役的话,所有的轮询、长连接等方式早就该废弃掉。那些整合多种双向推送消息方式的库(如http://Socket.IO、SignalR)当初最大的卖点就是兼容所有浏览器版本,自动识别旧版浏览器并采取不同的连接方式,现在也渐渐失去了优势——所有新版浏览器都兼容 WebSocket,直接用原生的就行了。

但是,很大一部分 AJAX 的使用场景仍然是传统的请求-响应形式,比如获取 json 数据、post 表单之类。这些功能虽然靠 WebSocket 也能实现,但就像在原本传输数据流的 TCP 之上定义了基于请求的HTTP协议一样,我们也要在 WebSocket 之上重新定义一种新的协议,最少也要加个 request id 用来区分每次响应数据对应的请求吧。

……但是,何苦一层叠一层地造个新轮子呢?直接使用 AJAX 不是更简单、更成熟吗?

另外还有一种情况,也就是传输大文件、图片、媒体流的时候,最好还是老老实实用 HTTP 来传。如果一定要用 WebSocket 的话,至少也专门为这些数据专门开辟个新通道,而别去占用那条用于推送消息、对实时性要求很强的连接。否则会把串行的 WebSocket 彻底堵死的。

所以说,WebSocket 在用于双向传输、推送消息方面能够做到灵活、简便、高效,但在普通的 Request-Response 过程中并没有太大用武之地,比起普通的 HTTP 请求来反倒麻烦了许多,甚至更为低效。

每项技术都有自身的优缺点,在适合它的地方能发挥出最大长处,而看到它的几个优点就不分场合地全方位推广的话,可能会适得其反。

用 Websocket 取代 ajax 来开发 web 应用,是不太可能的。

需要考虑以下更多的问题:

1、多种客户端访问技术,譬如移动端,自己开发的 sdk;用 http 协议,会很通用而简单;websocket在技术上,不够通用;

2、并发,http 是短连接,而 websocket 会保持长连接,当交互并不频繁的时候,连接是被大量浪费的,因此服务器的连接容量会大大多于 http;

3、负载,http 协议,可以很容易的进行 web 请求转发来扩容,在搭建 lbs 接入层的时候,很简单和稳定;而 websocket 协议,虽然 nginx 也可以转发,但是毕竟是新技术,稳定性未知;

4、简单:在问题诊断的时候,可以直接面向 http 协议进行切片从而监视原始数据,工具也很多;而 websocket,需要更多面向 tcp 协议的工具,复杂度和难度会增加不少;

综上,还是建议只有当需要服务器 push 的模块,才采用 websocket,而其他的交互采用 http。

websocket有没有可能取代ajax相关推荐

  1. websocket替代方案_WebSocket 有没有可能取代 AJAX ?

    先说结论吧:能取代一部分,但不可能完全取代. WebSocket的诞生本质上就是为了解决HTTP协议本身的单向性问题:请求必须由客户端向服务端发起,然后服务端进行响应.这个Request-Respon ...

  2. 第四部分-WebSocket后端轮询代替Ajax轮询

    WebSocket后端轮询代替Ajax轮询 Websocket服务端可以主动推送信息给客户端,解决了http轮询延迟的问题 同时解决服务器上消耗资源的问题 由于Websocket只需要一次HTTP握手 ...

  3. Websocket——原理及基本属性和方法

    Websocket--原理及基本属性和方法 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP ...

  4. Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx \s2018 s4 doc compc dtS44 \s2018 s4 doc dvc

    Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx \s2018 s4 doc compc dtS44 \s2018 s4 doc dvcCo ...

  5. WS协议—介绍及原理

    举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果.HTTP 协议做不到服务器主动向客户端推送信息. WebSocket 协议在2008年诞生,2011年成为国际标准.所 ...

  6. HTML5中的webSocket、ajax、http

    本文原链接:https://cloud.tencent.com/developer/article/1115496 https://cloud.tencent.com/developer/articl ...

  7. 认识HTML5的WebSocket 认识HTML5的WebSocket

    2019独角兽企业重金招聘Python工程师标准>>> 在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API.WebSocket提供了一个受欢迎的技 ...

  8. 浅谈WebSocket

          WebSocket是H5提出的为了解决客户端和服务器双工通信的方法.在我们使用HTTP协议通信时,客户端主动向服务器发送请求,得到服务器端数据.为了与服务器端数据保持一致,之前常用的有轮询 ...

  9. WebSocket学习与使用

    1.WebSocket是什么 WebSocket是一种在单个TCP连接上进行全双工通信的协议,其目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,使得服务器可以主动发送消息给浏览器.在HTML ...

最新文章

  1. 一个线程池中的线程异常了,那么线程池会怎么处理这个线程?
  2. STM32 基础系列教程 41 – SDMMC
  3. java中解决脏读_java并发编程学习之脏读代码示例及处理
  4. python不支持_为什么 Python 不支持函数重载?而其他语言大都支持?
  5. package.json和package-lock.json
  6. OJ1031: 判断点在第几象限
  7. 存储过程C语言与PL/pgSQL实现的效率对比
  8. vs vue 查看webpack安装成功_在Vue+webpack中详细讲解基础配置
  9. 一分钟学会看k线图_在股市中K线图怎么看,有什么意义?
  10. CS231n Assignment1 Knn
  11. linux 查看文件夹大小
  12. October cms-Plugins(插件-注册)
  13. springboot的最核心的27个注解详解
  14. 高性能PC机与服务器的真正区别
  15. 自定义gii生成模块
  16. Android 天气APP(七)城市切换 之 城市数据源
  17. 如果自己的微信被对方删除,微信会有哪些提示?
  18. Day1-介绍、基本语法、流程控制
  19. 【C素数】素数(质数)和分解质因数
  20. CF346B Lucky Common Subsequence 题解

热门文章

  1. 元旦,请查收程序员专属祝福礼!
  2. 如何进行时间序列的特征工程?
  3. 早鸟票只剩3天丨为何一定要参加今年的CNCC?
  4. 挑战 TensorFlow、PyTorch,“后浪”OneFlow 有没有机会?
  5. 黑客全家桶、文字提取利器、深度学习 500 问 | GitHub 热点速览
  6. 我做计算机视觉工程师的第一个月都学会了什么?
  7. 百度在美国遭集体起诉;iPhone 11 成苹果最畅销机型;OpenSSL 曝高危漏洞 | 极客头条...
  8. 400本以上电子书、1000门以上课程会员免费看,快来领取!
  9. 情人节脱单秘诀,程序员表白的情话大盘点!| CSDN 博文精选
  10. 你有真正理解 Java 的类加载机制吗?| 原力计划