SpringBoot整合Websocket
整合步骤很简单,请看下文分解。👇
-
引入Maven依赖,如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> <version>2.3.3.RELEASE</version> </dependency> -
新建一个类:WebSocketTextMsgConfig,实现WebSocketConfigurer接口,如下:
package com.example.textMessageWebsocket; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; @Configuration @EnableWebSocket public class WebSocketTextMsgConfig implements WebSocketConfigurer { @Autowired WebSocketTextmsgHandler webSocketTextmsgHandler; @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { // 添加某个Websocket URL请求的处理逻辑,这里是以ws开头的URL // 统一交给WebSocketTextmsgHandler类处理 registry.addHandler(webSocketTextmsgHandler, "/ws") // 为握手请求配置拦截器 .addInterceptors(new WebsocketTextMsgInteceptor()) .setAllowedOrigins("*"); } }该类主要是配置Websocket,包括配置指定URL的处理逻辑或握手请求的拦截器等。
-
接下来新建一个类:WebSocketTextmsgHandler,继承TextWebSocketHandler类,如下:
package com.example.textMessageWebsocket; import org.springframework.stereotype.Component; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; @Component public class WebSocketTextmsgHandler extends TextWebSocketHandler { // 建立Websocket连接后的处理逻辑 @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.println("connection established."); System.out.println("session id:"+session.getId()); System.out.println("uri:"+session.getUri()); super.afterConnectionEstablished(session); } // 主要的Websocket消息处理逻辑 @Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception { Object payload = message.getPayload(); System.out.println("payload:"+payload); session.sendMessage(new TextMessage("hello,"+payload)); super.handleMessage(session, message); } @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { super.handleTransportError(session, exception); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { System.out.println("connection closed."); super.afterConnectionClosed(session, status); } }该类主要用于处理文本类型的Websocket消息,如果需要处理二进制消息内容,继承BinaryWebSocketHandler类即可。
-
(可选)新建一个类:WebsocketTextMsgInteceptor,继承HttpSessionHandshakeInterceptor类,主要用于握手请求的处理逻辑,如下:
package com.example.textMessageWebsocket; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.stereotype.Component; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor; import java.util.Map; @Component public class WebsocketTextMsgInteceptor extends HttpSessionHandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { System.out.println("before hand shake."); return super.beforeHandshake(request, response, wsHandler, attributes); } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) { System.out.println("after hand shake."); super.afterHandshake(request, response, wsHandler, ex); } } -
新建Springboot启动类,如下:
package com.example.messagingstompwebsocket; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication(scanBasePackages = {"com.example"}) public class SpringWebsocketExampleApplication { public static void main(String[] args) { SpringApplication.run(SpringWebsocketExampleApplication.class, args); } }运行main方法后,Websokect服务就已经启动起来,可以通过Websocket客户端进行测试。
2380



被折叠的 条评论
为什么被折叠?



