当前位置: 代码迷 >> 综合 >> JavaEE:SpringBoot集成WebSocket
  详细解决方案

JavaEE:SpringBoot集成WebSocket

热度:6   发布时间:2024-02-10 16:36:31.0

一、导入依赖包:

<!-- 要继承起步依赖spring-boot-starter-parent -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.0.RELEASE</version>
</parent><dependencies><!-- 导入websocket依赖包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>
</dependencies>

二、使用WebSocket建立服务端(简单的示例):

1.创建WebSocket自动加载的配置类(启动时会自动加载):

@Configuration
@EnableWebSocket//WebSocket配置类
public class WSConfig implements WebSocketConfigurer {@Autowiredprivate WSInterceptor wSInterceptor; //自定义拦截器@Beanpublic WebSocketHandler msgHandler() {return new WSMsgHandler();}@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(msgHandler(), "/ws") //设置自定义消息处理.setAllowedOrigins("*").addInterceptors(wSInterceptor); //设置自定义拦截器}
}

2.WebSocket消息处理类:

//WebSocket消息处理类
public class WSMsgHandler extends TextWebSocketHandler {@Overridepublic void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {//收到消息触发session.sendMessage(new TextMessage("消息回执")); //发送回执消息}@Overridepublic void afterConnectionEstablished(WebSocketSession wsSession) throws Exception {//建立连接触发wsSession.sendMessage(new TextMessage("建立连接"));}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {//断开连接触发}
}

3.WebSocket消息拦截类:

@Component //WebSocket消息拦截类
public class WSInterceptor implements HandshakeInterceptor {@Overridepublic boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> map) throws Exception {return true; //返回false不会立连接}@Overridepublic void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {//握手成功后触发}
}

 

  相关解决方案