spring boot 集成websocket demo
时间: 2023-07-30 20:07:19 浏览: 142
好的,下面是一个简单的 Spring Boot 集成 WebSocket 的 Demo。
首先,你需要在 `pom.xml` 文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
然后,在 Spring Boot 的启动类上添加 `@EnableWebSocket` 注解。
```java
@SpringBootApplication
@EnableWebSocket
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
接下来,创建一个 Websocket 处理器(Handler)类,用来处理 WebSocket 消息的收发。
```java
@Component
public class WebSocketHandler extends TextWebSocketHandler {
private static final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.add(session);
System.out.println("New session established: " + session.getId());
}
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {
System.out.println("Received message: " + message.getPayload());
for (WebSocketSession webSocketSession : sessions) {
if (webSocketSession.isOpen() && !session.getId().equals(webSocketSession.getId())) {
webSocketSession.sendMessage(message);
}
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
sessions.remove(session);
System.out.println("Session closed: " + session.getId());
}
}
```
在上面的代码中,我们使用 `TextWebSocketHandler` 类来处理文本消息。当客户端连接上 WebSocket 服务器时,`afterConnectionEstablished` 方法会被调用;当客户端发送消息时,`handleTextMessage` 方法会被调用;当客户端断开连接时,`afterConnectionClosed` 方法会被调用。在 `afterConnectionEstablished` 方法中,我们将当前 WebSocket 会话添加到 `sessions` 集合中;在 `handleTextMessage` 方法中,我们将接收到的消息转发给其他客户端;在 `afterConnectionClosed` 方法中,我们将当前 WebSocket 会话从 `sessions` 集合中移除。
最后,我们需要定义一个 WebSocket 配置类,用来注册我们创建的 WebSocket 处理器。
```java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
private WebSocketHandler webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(webSocketHandler, "/websocket").setAllowedOrigins("*");
}
}
```
在上面的代码中,我们使用 `WebSocketConfigurer` 接口来配置 WebSocket。首先,我们注入了之前创建的 WebSocket 处理器 `WebSocketHandler`;然后,我们在 `registerWebSocketHandlers` 方法中,使用 `WebSocketHandlerRegistry` 注册了我们的 WebSocket 处理器,并指定了 WebSocket 的路径为 `/websocket`,允许跨域访问。
至此,一个简单的 Spring Boot 集成 WebSocket 的 Demo 就完成了。你可以在前端页面中使用 `WebSocket` 对象连接到 `/websocket` 路径,来实现 WebSocket 的消息收发。
阅读全文