创建maven项目
在idea新建普通maven项目
加入相关jar包
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId> <artifactId>websocketservertest</artifactId> <version>1.0-SNAPSHOT</version>
<properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <spring.boot.version>2.7.18</spring.boot.version> </properties>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
</dependencies>
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring.boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
</project>
|
添加测试handler
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; public class MyWebSocketHandler extends TextWebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.println("New WebSocket connection established: " + session.getId()); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { System.out.println("Received message: " + message.getPayload()); session.sendMessage(new TextMessage("Hello, you sent: " + message.getPayload())); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { System.out.println("WebSocket connection closed: " + session.getId()); } @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { System.err.println("WebSocket transport error: " + exception.getMessage()); } }
|
添加配置类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 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 WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new MyWebSocketHandler(), "/websocket-endpoint") .setAllowedOrigins("*"); } }
|
运行并测试
运行spring boot 项目
搜索引擎搜索 websocket在线测试工具。
https://wstool.js.org/
输入地址:ws://127.0.0.1:8080/websocket-endpoint
发送消息:xxxx 查看是否收到和响应情况
关闭连接测试。
缓冲区设置
如果客户端发送消息太大超过8192字节时提示:
1
| WebSocket closing: 1009 / No async message support and buffer too small. Buffer size: [8,192], Message size: [8,200]
|
在WebSocketConfig 添加:
1 2 3 4 5 6 7 8 9 10
| @Bean public ServletServerContainerFactoryBean createWebSocketContainer() { ServletServerContainerFactoryBean bean = new ServletServerContainerFactoryBean(); bean.setMaxTextMessageBufferSize(60 * 1024 * 1024); bean.setMaxBinaryMessageBufferSize(60 * 1024 * 1024); return bean; }
|
springcloud gateway中最大帧设置
如果客户端发送消息太大超过65535,后提示:
1
| WebSocket closing: 1009 / Max frame length of 65536 has been exceeded.
|
在spring cloud gateway配置文件中:
1 2 3 4 5 6
| spring: cloud: gateway: httpclient: websocket: max-frame-payload-length: 2097152
|