初次接触WebSocket的人,都会问同样的问题:我们已经有了HTTP协议,为什么还需要另一个协议?它能带来什么好处?“
答案很简单,因为HTTP协议有一个缺陷:通信只能由客户端发起。
这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用”轮询(polling)”:每隔一段时间,就发出一个询问(request),了解服务器有没有新的信息。轮询的效率低,非常浪费资源(因为必须不停连接,或者HTTP连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。
WebSocket应运而生。
伴随着HTML5推出的WebSocket,真正实现了Web的实时通信,使B/S模式具备了C/S模式的实时通信能力。WebSocket的工作流程是这样的:
浏览器通过JavaScript向服务器发出建立WebSocket连接的请求,在WebSocket连接建立成功后,客户端和服务端就可以通过TCP连接传输数据。因为WebSocket连接本质上是TCP连接,不需要每次传输都带上重复的头部数据,所以它的数据传输量比轮询和Comet技术小了很多。
从以上的这段描述中,其实已经回答了以上提到的三个问题。
(1) WebSocket是可以实现由服务器主动向客户端推送消息的功能,而不需要依赖于来自客户端的请求,增加了服务器的主动性和灵活性;
(2)与WebSocket类似的协议就是HTTP了,HTTP的通信只能由客户端发起,而WebSocket的通信只需要客户端与服务器握手建立连接后,双方便可以平等地、无差别地相互传送信息了,直至任意一方主动断开连接结束;
(3)WebSocket由于依赖的是TCP协议,因此在连接建立后,传输数据量比依赖于HTTP的传输数据量要小,提高了传输的效率。
建立握手拦截器:
![在这里插入图片描述](https://img-blog.csdnimg.cn/
webosoket配置类:
接收websocket传送的信息