WebScoket (订阅与广播模式)
1.maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2.configure配置
package com.myself.computerThinking.Subscription;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
@Component
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
/**
* 用户可以订阅来自“/topic,/user”为前缀的消息
* 客户端只可以订阅这个前缀的主题
*/
registry.enableSimpleBroker("/topic","/user");
/**
* 客户端发送过来的消息,需要以“/app”为前缀,再通过Broker转发给响应的Controller
*/
registry.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
/**
* 路径:"websocket/socketServer.action"被注册为STOMP端点,对外暴露,客户端通过该路径接入webScoket服务
*/
registry.addEndpoint("websocket/socketServer.action")
.setAllowedOrigins("*") //设置可以跨域请求
.withSockJS(); // 添加SockJS支持
}
}
withSockJS()
:添加SockJS的支持。(SockJS有关信息:https://blog.csdn.net/john_62/article/details/78208177)
SockJS是一个浏览器JavaScript库,它提供了一个类似于网络的对象。SockJS提供了一个连贯的、跨浏览器的Javascript API,它在浏览器和web服务器之间创建了一个低延迟、全双工、跨域通信通道。按浏览器是否支持WebSocket,以此使用三类传输对象:WebSocket
> HTTP流
> HTTP长轮询
- 如果添加了SockJS()支持,前段页面代码:
var socket = new SockJS(url);
url为http、https开头 - 没有添加支持,
var socket = new WebSocket(url);
url为ws、wss开头
添加路径拦截器
@Override