网络传输知识:WebSocket协议详解

一、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就解决了这样一个难题,建立后,可以直接跟接线员建立持久连接,有信息的时候客服想办法通知接线员,然后接线员在统一转交给客户。这样就可以解决客服处理速度过慢的问题了。
经验分享 程序员 微信小程序 职场和发展