开启WebSocket支持
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
WebSocket配置
//配置消息代理,默认情况下使用内置的消息代理
public interface WebSocketMessageBrokerConfigurer {
// 添加这个Endpoint,这样在网页中就可以通过websocket连接上服务,也就是我们配置websocket的服务地址,并且可以指定是否使用socketjs
void registerStompEndpoints(StompEndpointRegistry var1);
// 配置发送与接收的消息参数,可以指定消息字节大小,缓存大小,发送超时时间
void configureWebSocketTransport(WebSocketTransportRegistration var1);
// 设置输入消息通道的线程数,默认线程为1,可以自己自定义线程数,最大线程数,线程存活时间
void configureClientInboundChannel(ChannelRegistration var1);
// 设置输出消息通道的线程数,默认线程为1,可以自己自定义线程数,最大线程数,线程存活时间
void configureClientOutboundChannel(ChannelRegistration var1);
// 添加自定义的消息转换器,spring 提供多种默认的消息转换器,返回false,不会添加消息转换器,返回true,会添加默认的消息转换器,当然也可以把自己写的消息转换器添加到转换链中
boolean configureMessageConverters(List<MessageConverter> var1);
// 配置消息代理,哪种路径的消息会进行代理处理
void configureMessageBroker(MessageBrokerRegistry var1);
// 自定义控制器方法的参数类型
void addArgumentResolvers(List<HandlerMethodArgumentResolver> var1);
// 自定义控制器方法返回值类型
void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> var1);
}
一般情况下只添加比较重要的即可
// 添加这个Endpoint,这样在网页中就可以通过websocket连接上服务,也就是我们配置websocket的服务地址,并且可以指定是否使用socketjs
void registerStompEndpoints(StompEndpointRegistry var1);
完整配置如下:
/**
* 开启WebSocket支持
* @author
* @create 2022/3/16
*/
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
/**
* 添加这个Endpoint,这样在网页中就可以通过websocket连接上服务,也就是我们配置websocket的服务地址,并且可以指定是否使用socketjs
*/
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
String defaultWebsocketEndpointPath = "/server/*";
String defaultSockJsEndpointPath = "/server/*";
/**
* 看了下源码,它的实现类是WebMvcStompEndpointRegistry,addEndpoint是添加到WebMvcStompWebSocketEndpointRegistration的集合中,所以可以添加多个端点
* 1、addEndpoint:将 “serviceName/server/*”路径,注册STOMP协议的端点。这个HTTP URL是供WebSocket或SockJS客户端访问的地址,用户连接了这个端点后就可以进行websocket通讯,支持socketJs
*/
StompWebSocketEndpointRegistration webSockedEndpoint = registry.addEndpoint(defaultWebsocketEndpointPath);
StompWebSocketEndpointRegistration sockJsEndpoint = registry.addEndpoint(defaultSockJsEndpointPath);
/**
* 2、withSockJS()指定端点使用SockJS协议
*/
sockJsEndpoint.withSockJS();
/**
* 3、setAllowedOrigins("*") 添加允许跨域访问
*/
webSockedEndpoint.setAllowedOrigins("*");
sockJsEndpoint.setAllowedOrigins("*");
}
}