一、WebSocket与HTTP
WebSocket是HTML5出的协议,也就是说HTTP协议没有变化,但HTTP是不支持持久连接的(长连接,循环连接的不算)
首先HTTP有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个HTTP请求合并为一个,但是 Websocket 其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充可以通过这样一张图理解
有交集,但是并不是全部。
二、HTTP瓶颈
- 一条连接上只可以发送一个请求
- 请求只能从客户端开始。客户端不可以接收除了响应以外的指令。
- 请求 / 响应首部未经过压缩就直接进行传输。首部的信息越多,那么延迟就越大。
- 发送冗长的首部。每次互相发送相同的首部造成的浪费越多
- 可以任意选择数据压缩格式。非强制压缩发送
(1)长轮询
指:客户端发起连接后,若没消息,就一直不返回response给客户端,直到有消息才返回,返回之后,客户端再次建立连接,周而复始
(2)Ajax轮询
指:浏览器每隔多少秒就发送一次请求,询问服务器是否有新消息。
Ajax轮询
:需要服务器有高速处理速度和资源
长轮询
:需要很高的并发
三、WebSocket
websocket协议具有以下的特点:
- 推送功能
支持服务器端向客户端推送功能。服务器可以直接发送数据而不用等待客户端的请求。 - 减少通信量
只要建立起websocket连接,就一直保持连接,在此期间可以源源不断的传送消息,直到关闭请求。也就避免了HTTP的非状态性。
和http相比,不但每次连接时的总开销减少了,而且websocket的首部信息量也小 ,通信量也减少了。 - 减少资源消耗
那么为什么他会解决服务器上消耗资源的问题呢?
其实我们所用的程序是要经过两层代理的,即HTTP协议在Nginx等服务器的解析下,然后再传送给相应的Handler(PHP等)来处理。
简单地说,我们有一个非常快速的接线员(Nginx),他负责把问题转交给相应的客服(Handler)。本身接线员基本上速度是足够的,但是每次都卡在客服(Handler)了,老有客服处理速度太慢。导致客服不够。Websocket就解决了这样一个难题,建立后,可以直接跟接线员建立持久连接,有信息的时候客服想办法通知接线员,然后接线员在统一转交给客户。这样就可以解决客服处理速度过慢的问题了。