springboot 集成 websocket
时间: 2025-01-03 14:34:28 浏览: 17
### Spring Boot 整合 WebSocket 示例教程
#### 1. 添加依赖项
为了在Spring Boot项目中使用WebSocket,需要引入`spring-boot-starter-websocket`依赖。这可以通过修改项目的构建文件(Maven的pom.xml或Gradle的build.gradle)来完成。
对于Maven项目,在`<dependencies>`标签内加入以下代码片段:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
这段XML定义了用于支持WebSocket功能的核心库[^3]。
#### 2. 创建启动类
创建一个新的Java类作为应用程序入口点,并标注为@SpringBootApplication以便自动配置Spring上下文环境。此操作通常只需要编写少量代码即可实现基本的功能框架搭建。
```java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
```
上述代码展示了最简单的Spring Boot应用启动方式[^4]。
#### 3. 配置WebSocket服务器端逻辑
接下来要做的就是设置好服务端接收客户端请求的具体行为模式。一般情况下会涉及到两个主要组件——`WebSocketConfigurer`接口及其子类用来声明全局性的路由规则;另一个则是具体的处理器实例负责实际的消息处理工作。
下面是一个典型的WebSocket配置器例子:
```java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myWebSocketHandler(), "/ws").setAllowedOrigins("*");
}
@Bean
public MyWebSocketHandler myWebSocketHandler() {
return new MyWebSocketHandler();
}
}
```
这里注册了一个名为`myWebSocketHandler()`的方法返回自定义的WebSocket处理器对象,并将其映射到路径`/ws`上接受来自任意源地连接尝试[^5]。
#### 4. 编写消息处理器
最后一步是设计具体的消息监听者即所谓的“handler”。此类应当继承于`TextWebSocketHandler`或其他更高级别的抽象基类之一,从而获得必要的工具方法去解析传入的数据包并作出响应动作。
```java
@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
private final Logger logger = LoggerFactory.getLogger(MyWebSocketHandler.class);
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
String payload = message.getPayload();
logger.info("Received message from client: " + payload);
// Echo back the received text to all connected clients.
session.sendMessage(new TextMessage("Echo: " + payload));
}
}
```
在这个示例里每当接收到新的文本型数据帧时就会触发对应的事件回调函数执行相应的业务流程。
---
阅读全文