# # websocket|springboot 添加必要的依赖 ```{lang} org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-websocket ``` 如果同时导入了spring-boot-starter-web和spring-boot-starter-websocket,为了避免web依赖中的tomcat和websocket中的tomcat容器冲突,要排除web中的tomcat 编写Config类 ```{lang} package com.frunoob.service.websockt; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean; import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor; /** * @Auther: Qiqi FU * @Date: 2023/6/27 */ @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(),"/homepage/1") .addInterceptors(new HttpSessionHandshakeInterceptor()) .setAllowedOrigins("*") // 允许的源地址 ; } @Bean public WebSocketHandler myHandler(){ return new MyWebSocketHandler(); } @Bean public ServletServerContainerFactoryBean createWebSocketContainer() { ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean(); container.setMaxTextMessageBufferSize(8192); // web容器能够接收的最大数据容量,超出容量自动断开 container.setMaxBinaryMessageBufferSize(8192); return container; } } ``` handler类 处理客户端消息,处理各种事件 ```{lang} package com.frunoob.service.websockt; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; /** * @Auther: Qiqi FU * @Date: 2023/6/27 */ public class MyWebSocketHandler extends TextWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { //**** System.out.println(message.toString()); } } ``` > **需要注意的地方** > web servlet 容器有承载容量,客户端传输的数据超出容量会导致断开websocket连接。 > ngix等代理软件有识别websocket是否挂起的功能,如果长时间没有数据交互有几率被代理关闭。 > 有些不受控制的代理,可能会阻止请求头中传递 upgrade 信息 ,http无法升级为websocket Loading... # # websocket|springboot 添加必要的依赖 ```{lang} <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 如果同时导入了spring-boot-starter-web和spring-boot-starter-websocket,为了避免web依赖中的tomcat和websocket中的tomcat容器冲突,要排除web中的tomcat 编写Config类 ```{lang} package com.frunoob.service.websockt; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean; import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor; /** * @Auther: Qiqi FU * @Date: 2023/6/27 */ @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(),"/homepage/1") .addInterceptors(new HttpSessionHandshakeInterceptor()) .setAllowedOrigins("*") // 允许的源地址 ; } @Bean public WebSocketHandler myHandler(){ return new MyWebSocketHandler(); } @Bean public ServletServerContainerFactoryBean createWebSocketContainer() { ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean(); container.setMaxTextMessageBufferSize(8192); // web容器能够接收的最大数据容量,超出容量自动断开 container.setMaxBinaryMessageBufferSize(8192); return container; } } ``` handler类 处理客户端消息,处理各种事件 ```{lang} package com.frunoob.service.websockt; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; /** * @Auther: Qiqi FU * @Date: 2023/6/27 */ public class MyWebSocketHandler extends TextWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { //**** System.out.println(message.toString()); } } ``` > **需要注意的地方** > web servlet 容器有承载容量,客户端传输的数据超出容量会导致断开websocket连接。 > ngix等代理软件有识别websocket是否挂起的功能,如果长时间没有数据交互有几率被代理关闭。 > 有些不受控制的代理,可能会阻止请求头中传递 upgrade 信息 ,http无法升级为websocket 最后修改:2025 年 07 月 14 日 © 允许规范转载 赞 别打赏,我怕忍不住购买辣条与续命水