WebSocket :WebSocket协议支持(在受控环境中运行不受信任的代码的)客户端与(选择加入该代码的通信的)远程主机之间进行全双工通信
                       简单的说,WebSocket协议之前,双工通信是通过多个http链接来实现,这导致了效率低下。

Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。

HTTP的生命周期通过Request来界定,也就是一个Request 一个Response,那么在HTTP1.0中,这次HTTP请求就结束了。
在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。
但是请记住 Request = Response , 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。

WebSocket 解决了 HTTP 的几个难题
3.1)难题1(http协议的被动性):采用 WebSocket 协议后,服务器可以主动推送消息给客户端;而不需要客户端以(长/短)轮询的方式发起http请求到server以获取数据更新反馈;这样一来,客户端只需要经过一次HTTP请求,就可以做到源源不断的信息传送了(在程序设计中,这种设计叫做回调,即:server 端有信息了再来通知client 端,而不是 client 端 每次都傻乎乎地跑去轮询server端 是否有消息更新);
3.2)难题2(http协议的无状态性/健忘性):短轮询是每次http请求前都要建立连接,而长轮询是相邻几次请求前都要建立连接;http请求响应完成后,服务器就会断开连接,且把连接的信息全都忘记了;所以每次建立连接都要重新传输连接上下文(下面有补充),将 client 端的连接上下文来告诉server 端;而 WebSockct只需要一次HTTP 握手,整个通讯过程是建立在一次连接(状态)中的,server 端会一直推送消息更新反馈到客户端,直到客户端关闭请求,这样就无需 客户端为发送消息而建立不必要的 tcp 连接 和 为了建立tcp连接而发送不必要的冗余的连接上下文消息;

【补充】http 长连接(tcp 连接可复用)
1)介绍:http协议 目前有两个版本:1.1 和 1.0;区别是 1.1支持 长连接(普遍使用http1.1版本),长连接也叫做持久连接(keep-alive);而1.0不支持长连接,在1.0版本下,每个http请求响应后都会关闭tcp连接,下一次http请求会重新建立http连接;
2)http 长连接:多个http 请求共用同一个 tcp 连接,这样可以减少相邻多次 http请求导致的 tcp连接建立和关闭的资源消耗;http1.1 在请求头和响应头中用 connection 字段标识 该http连接是否是 长连接,即connection: keep-alive 表示长连接;而 connection: closed 表明服务器关闭tcp 连接;
3)keep-alive:与 connection 相对应的是 keep-alive,其属性有 timeout=30 和 max=5 分别是 两次 http 请求 保持的时间,max表示这个tcp 连接最多被几个 http 请求重用;

最新文章

  1. leetcode 199 :Binary Tree Right Side View
  2. 运行时c函数
  3. Linux系统真正的优势以及学习方法
  4. CUDA/OpenCL 学习资料
  5. MODBUS-RTU学习
  6. LINQ to SQL 语句(3) 之 Count/Sum/Min/Max/Avg
  7. 设置IE浏览器代理上网
  8. .NET混淆工具 (Dotfuscator Professional Edition)
  9. (转载)mysql查询今天、昨天、7天、近30天、本月、上一月数据
  10. Qt HTTP请求同步调用
  11. PyQt主窗体设置停靠窗口(QDockWidget)的叠加顺序
  12. 谷歌(Google Chrome)插件安装
  13. float_array.go
  14. linux 命令 — grep
  15. ajax-----readyState总结
  16. OAuth2.0的原理介绍
  17. 破解Linux系统root用户密码
  18. python代码实现stack和queue
  19. JavaWeb(三)——Tomcat服务器(二)
  20. 深入理解Spring MVC(山东数漫江湖)

热门文章

  1. Jquery EasyUI弹出窗体
  2. Java多线程面试问题
  3. Oracle JDBC 连接卡死后 Connection Reset解决过程
  4. shell 获取当前svn代码目录版本号
  5. 【BZOJ4453】cys就是要拿英魂! 后缀数组+单调栈+set
  6. 【BZOJ4238】电压 DFS树
  7. Linux 设置mysql开机启动
  8. 【oracle案例】ORA-01102: cannot mount database in EXCLUSIVE mode
  9. 九度OJ 1010:A + B (字符串处理)
  10. git merge的本质