介绍:
WebSocket是HTML5开始提供的一种浏览器与服务器之间进行全双工通信的网路技术。在WebSocket中,浏览器只需要完成一次握手就可以形成一条通道,允许Client和Server进行数据的互传。
HTTP瓶颈
很多网站为了做到即时通讯,所用的技术都是轮询,轮询就是客户端在一定的时间向服务器发送request,等待服务器的响应。由于每次轮询客户端都会发送请求,请求报文的首部会被反复发送,这样就会占用资源。
AJAX使用
它是通过Javascript脚本语言的调用就能和服务器进行HTTP通信,通过这种手段就可以再已经加载完毕的页面上发起请求,只是更新局部页面。
Comet使用
一旦服务器有更新,Comet不会让请求等待,而是直接给客户端返回响应,这种是通过延迟应答模拟实现付武器向客户端推送的功能。服务器收到请求,在处理完后就立即返回响应,但是为了实现推送功能,Conet会把响应置于挂起状态,当服务器中内容有更新时,再返回响应。但是这样做会维持连接消耗更多的资源,所以仍没有解决HTTP协议本身的问题。
WebSocket
而WebSocket的出现,让问题有了好转,客户端仍然是采用HTTP协议与服务器进行通信,但是当三次握手后,客户端请求升级为WebSocket协议,如果服务器能支持就会升级协议为WebSocket,这样就建立了一个全双工的通信。注意,还是需要客户端来主动连接服务器才能进行后面的事。
WebSocket由于是HEML5出现的,并不是对所有的浏览器都兼容,所以有了下面的话。
That's why a new project [was born]: [SockJS]- yet another WebSocket emulation library, but this time done right.