一、什么是WebSocket? 1.WebSocket 是基于TCP/IP协议,独立于HTTP协议的通信协议。 2.WebSocket 是双向通讯,有状态,客户端一(多)个与服务端一(多)双向实时响应(客户端 ⇄ 服务端)。 3.WebSocket 是应用在浏览器的 Socket (是 Socket 模型接口的实现),Socket 是一个网络通信接口 (通信规范)。
二、工作原理
用户打开Web浏览器,并访问Web站点。Web浏览器(客户端)与Web服务端建立连接。websocket协议具有以下的特点Web浏览器(客户端)能定时收发Web服务端数据,Web服务端也能定时收发Web浏览器数据。三、websocket协议特点 1.推送功能 支持服务器端向客户端推送功能。服务器可以直接发送数据而不用等待客户端的请求。 2.减少通信量 只要建立起websocket连接,就一直保持连接,在此期间可以源源不断的传送消息,直到关闭请求。也就避免了HTTP的非状态性。 和http相比,不但每次连接时的总开销减少了,而且websocket的首部信息量也小 ,通信量也减少了。 3.减少资源消耗 四、Websocket的作用 (1)ajax轮询 ajax轮询的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。 (2)long poll(长轮询) long poll 其实原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直打电话,没收到就不挂电话),也就是说,客户端发起连接后,如果没消息,就一直不返回Response给客户端(对于PHP有最大执行时间,建议没消息,执行到一定时间也返回)。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。 从上面可以看出其实这两种方式,都是在不断地建立HTTP连接,关闭HTTP协议,由于HTTP是非状态性的,每次都要重新传输 identity info (鉴别信息),来告诉服务端你是谁。然后等待服务端处理,可以体现HTTP协议的另外一个特点,被动性。 何为被动性呢,其实就是,服务端不能主动联系客户端,只能有客户端发起。从上面很容易看出来,不管怎么样,上面这两种都是非常消耗资源的。 ajax轮询 需要服务器有很快的处理速度和资源。(速度)long poll 需要有很高的并发,也就是说同时接待客户的能力。(场地大小) (3)WebSocket Websocket解决了HTTP的这几个难题。首先,被动性,当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端啦。解决了上面同步有延迟的问题。 解决服务器上消耗资源的问题:其实我们所用的程序是要经过两层代理的,即HTTP协议在Nginx等服务器的解析下,然后再传送给相应的Handler(php等)来处理。简单地说,我们有一个非常快速的 接线员(Nginx) ,他负责把问题转交给相应的 客服(Handler) 。Websocket就解决了这样一个难题,建立后,可以直接跟接线员建立持久连接,有信息的时候客服想办法通知接线员,然后接线员在统一转交给客户。 由于Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求,这样就解决了接线员要反复解析HTTP协议,还要查看identity info的信息。 缺点:不兼容低版本的IE