业务需求,导出某一数据,但是有时候可能很多,可以设计一个进度提醒功能-----WebSocket推送导出进度。

(1) 添加依赖
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
(2) WebSocket配置类
java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(exportProgressHandler(), "/export/progress")
.setAllowedOrigins("*");
}
@Bean
public WebSocketHandler exportProgressHandler() {
return new ExportProgressHandler();
}
}
(3) WebSocket处理器(核心逻辑)
java
public class ExportProgressHandler extends TextWebSocketHandler {
// 保存所有活跃连接(Key: ws_id, Value: Session)
private static final ConcurrentHashMap<String, WebSocketSession> sessions = new ConcurrentHashMap<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) {
String wsId = session.getHandshakeHeaders().getFirst("ws_id");
sessions.put(wsId, session); // 建立连接时注册
}
// 推送进度给前端
public static void sendProgress(String wsId, int progress) {
WebSocketSession session = sessions.get(wsId);
if (session != null && session.isOpen()) {
session.sendMessage(new TextMessage("{\"progress\": " + progress + "}"));
}
}
}