1. 前言
最近需要一种web服务端推送信息到客户端的技术,于是了解到websocket技术。经过几天的学习,对websocket技术有了一定的了解,遂整理了网上的资料写下了这篇博客,来加深自己的理解。
2. websocket简介
2.1 websocket出现背景
HTTP 协议从版本1.0发展到1.1,除了默认长连接之外就是缓存处理、带宽优化和安全性等方面的不痛不痒的改进。它一直保留着无状态、请求/响应模式,也就意味着服务器无法主动推送信息给客户端。
在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是Ajax轮询(Polling)和Comet技术,Comet又可细分为两种实现方式,一种是长轮询机制,一种称为流技术,这两种方式实际上是对轮询技术的改进,这些方案带来很明显的缺点,需要由浏览器对服务器发出HTTP request,大量消耗服务器带宽和资源。面对这种状况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并实现真正意义上的实时推送。
2.2 websocket特点
WebSocket协议本质上是一个基于TCP的协议,它由通信协议和编程API组成,WebSocket能够在浏览器和服务器之间建立双向连接,以基于事件的方式,赋予浏览器实时通信能力。既然是双向通信,就意味着服务器端和客户端可以同时发送并响应请求,而不再像HTTP的请求和响应。
它与HTTP一样通过已建立的TCP连接来传输数据,但是它和HTTP最大不同是:
- WebSocket是一种双向通信协议。在建立连接后,WebSocket服务器端和客户端都能主动向对方发送或接收数据,就像Socket一样;
- WebSocket需要像TCP一样,先建立连接,连接成功后才能相互通信。
相比HTTP长连接,WebSocket有以下特点:
- 是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。
- HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换
HTTP header
,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5)。此外还有multiplexing
、不同的URL可以复用同一个WebSocket
连接等功能。这些都是HTTP长连接不能做到的。
3. websocket整合SpringBoot的简单使用实例
3.1 服务端
WebSocketServer.java
"/websocket/{sid}") ( |
WebSocketConfig.java
|
CheckCenterController.java
|
3.2 客户端
为了方便运行,本客户端简单的使用了静态html来演示,其中用到了一点vue和element-ui知识。
|
4. 项目源码
最后附上项目源代码