WebSocket协议是由HTML5定义的,基于TCP协议实现的一种网络协议,它实现了客户端与服务器全双工通信。也就是说通过该协议服务器可以主动发送信息给客户端。
信息只能单向传送为单工;信息能双向传送但不能同时双向传送称为半双工,信息能够同时双向传送则称为全双工。
WebSocket协议基于TCP协议实现,客户端和服务器只需要做一个握手的动作之后,形成了一条基于客户端和服务器之间的快速通道。后续两者之间便可以进行多次数据帧双向传输过程。
这样实现的目的是客户端和服务器进行频繁双向通信时,可以使服务器避免打开多个HTTP连接进行工作来节约资源,提高工作效率和资源利用率。
在没有WebSocket协议之前,服务器如何向浏览器端推送消息?
此时,通常的实现方式是在页面通过Ajax定时轮询,比如每隔1秒中向服务器发送一次HTTP请求,询问服务器是否有新消息,服务器返回结果。
这种形式缺点很明显,也就是说浏览器需要不断的向服务器发出HTTP请求,而HTTP请求包含较长的头部,有效信息相对较少,这样会造成很大的浪费。
再试想一下,如果同时打开很多浏览器页面,同时每个请求都会出现阻塞请求,会对服务器造成一定的并发量和资源浪费。
因此,HTML5定义的WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
WebSocket协议本质上是一个基于TCP的协议,因此与HTTP协议没有什么关系。
基于上面所述WebSocket的机制,它拥有以下特点:
在Spring Boot 2.x中专门添加了针对WebSocket的功能的start,可以快速集成。同时基于注解形式,可以快速实现WebSocket服务器端的功能。
本篇文章我们了解了WebSocket相关的概念、原理、诞生条件以及特点。在了解完以上基础知识之后,后面我们将通过两种形式(基于WebSocket协议和基于STOMP协议)的实例来展示如何在Spring Boot中使用WebSocket。