一、为什么使用WebSocket
WebSocket通过在客户端和服务端之间一次握手后创建持久性的链接进行高效的双向数据传输,一般用于服务端有连续的状态变更需在客户端实时展示。传统的HTTP只能通过轮询机制不断建立HTTP连接获取服务器最新信息,这种方式效率低且浪费资源。
二、WebSocket简介
WebSocket的最大特点是服务端可以主动向客户端推送消息,客户端也可以主动向服务端推送消息,是真正的双向平等对话,属于服务推送技术的一种。
WebSocket和HTTP的连接会话周期区别如图:
其他特点:
- 与http协议有良好的兼容性,默认端口也是80和443,并且握手阶段采用http协议不容易被屏蔽,能通过各种代理服务器
- 数据格式轻量,性能高效,通信效率高
- 可以发送文本和二进制数据
- 没有同源限制,客户端可以和任何服务端通信
- 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。
三、spring boot 集成WebSocket
(1)创建spring boot 工程引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
(2)spring websocket的核心配置
核心配置类代码如下:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
//外部可订阅的socket数据服务(socket/topic为服务端广播消息的客户端订阅地址前缀,socket/user为客户端个性化消息的订阅地址前缀)
private static final String[] brokers = {
"/socket/topic","/socket/user"
};
//配置stomp端点,即客户端的握手连接机制
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/socket") //注册Stomp端点ÿ