**websocket 模拟实现简单QQ聊天**
**1.了解什么是websocket 协议?**
它是从HTML5开始提供的、基于TCP的、对传统HTTP协议(短连接)的升级版,在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/cb02181617bac348574134b4adbd7a2d.png)
**2.什么ajax轮询**
轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输出入”(Programmed I/O)。轮询法的概念是,由CPU定时发出询问,依序询问每一个周边设备是否需要其服务,有即给予服务,服务结束后再问下一个周边,接着不断周而复始。在WEB上来说就是客户端一直向服务端发起请求,服务端返回数据,不论返回什么都会再次向服务端发送请求。
但是缺点也是很明显,访问量过大,会导致服务器压力过大。优点的话是很容易实现
3.了解WebSocket的优点
WebSocket API的优势在于服务器和客户端可以在固定的时间范围内的任意时刻,相互推送消息。在建立连接之后,服务器可以主动传送数据给客户端。WebSocket 并不限于以AJAX(或XHR)方式通信,因为Ajax技术需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息。
4.怎么使用WebSocket
(1)加入Spring+websocket所依赖的Jar包
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4ce12613d0ee08028a39403b3c3e3a43.png)
(2)注册SebSocket处理器
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e3f2b24fa014fac395e21bf017e8a469.png)
(3)创建握手拦截器,重写beforeHandshake方法,这个方法负责拦截HttpSess中的数据,放到WebSocket Session 中
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/29773a17aee7c33319e851c168bb4a7d.png)
(4)处理页面文本消息,从WebSocket session中获取数据,在页面显示,并保存到数据库。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6d0b41f3a5e4a5f7739adcc4228cca08.png)
(5)js里面判断浏览器是否支持websocket,如果不支持就提示一下用户