赞
踩
WebSocket是一种在单个TCP连接上进行全双工通信的协议。它最初于2008年被提出,后来由IETF标准化。WebSocket协议旨在解决HTTP协议的一些限制,例如HTTP请求只能由客户端发起,服务器不能主动向客户端发送数据等。
早期,很多网站为了实现推送技术,所用的技术都是轮询。轮询是指由浏览器每隔一段时间向服务器发出HTTP请求,然后服务器返回最新的数据给客户端。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求与回复可能会包含较长的头部,其中真正有效的数据可能只是很小的一部分,所以这样会消耗很多带宽资源。
在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
如上图所示,从上图看出可以,WebSocket和HTTP轮询本质上都依赖于TCP的握手,他们二者都是应用层的协议,事实上,WebSocket和HTTP的工作端口都是80和443,WebSocket可以使用HTTP代理和中介,兼容HTTP协议。
不同的是HTTP轮询获取信息每次都需要客户端向服务端发送请求建立连接,而WebScoket经过第一次建立连接后,连接就被持久化下来, 不需要重复建立连接,而且可以由服务端主动向客户端发送信息。
WebSocket的优点包括:
WebSocket的缺点包括:
下面用一个简单的示例,展示Spring boot如何集成WebSocket,然后实现简单的建立连接后服务器向客户端发送信息并向其他在线用户广播。
新建Spring boot项目,在pom文件加入以下代码
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-websocket</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
-
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>fastjson</artifactId>
- <version>1.2.83</version>
- </dependency>
创建如下文件夹:
在interceptor文件家新建WebSocketInterceptor类文件,代码如下:
- @Component
- public class WebSocketInterceptor extends HttpSessionHandshakeInterceptor {
-
- @Override
- public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHa
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。