Springboot应用WebSocket服务测试
(1)在已经创建好的SpringBoot项目应用WebSocket依赖
pom.xml
<!-- websocket --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>
(2)创建配置项WebSocketConfig.java
package wz.com.ai_diagnosis.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
/*** @Author lxw* @ClassName WebSocketConfig* @Date 2025/6/16 14:57*/
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {@Overridepublic void configureMessageBroker(MessageBrokerRegistry config) {config.enableSimpleBroker("/topic");config.setApplicationDestinationPrefixes("/app");}
@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {registry.addEndpoint("/diagnosis-websocket").setAllowedOriginPatterns("*").withSockJS();}
}
(3)创建websocket业务层
service/WebSocketService.java
package wz.com.ai_diagnosis.service;
import wz.com.ai_diagnosis.entity.BDiagnosisResult;
import wz.com.ai_diagnosis.entity.VO.ObjectReturnVO;
import java.util.List;
/*** @Author lxw* @ClassName WebSocketService* @Date 2025/6/16 14:59*/
public interface WebSocketService {void sendDiagnosisResults(String module, List<BDiagnosisResult> results);
void sendConsumpDiagResults(ObjectReturnVO objectReturnVO);
}
service/impl/WebSocketServiceImpl.java
package wz.com.ai_diagnosis.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Service;
import wz.com.ai_diagnosis.entity.VO.ObjectReturnVO;
import wz.com.ai_diagnosis.service.WebSocketService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*** @Author lxw* @ClassName WebSocketServiceImpl* @Date 2025/6/16 14:59*/
@Slf4j
@Service
public class WebSocketServiceImpl implements WebSocketService {@Autowiredprivate SimpMessagingTemplate messagingTemplate;@Overridepublic void sendConsumpDiagResults(ObjectReturnVO objectReturnVO) {Map<String, Object> message = new HashMap<>();message.put("data", ResultUtil.success(objectReturnVO));messagingTemplate.convertAndSend("/topic/diagConsump", message);}
}
实体类entity/ObjectReturnVO.java
package wz.com.ai_diagnosis.entity.VO;
import lombok.Data;
import lombok.experimental.Accessors;
/*** 自定义对象封装* @Author lxw* @ClassName ObjectVO* @Date 2025/7/4 16:48*/
@Data
@Accessors(chain = true)
public class ObjectReturnVO {/*** 结果数据*/private String resultData;
}
在自己的业务层中应用webSocketservice
@AutowiredWebSocketService webSocketService;public test(){webSocketService.sendConsumpDiagResults(new ObjectReturnVO().setResultData("无能耗诊断结果"));}
页面测试
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>诊断模块实时结果查看</title><script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script><script src="https://cdn.jsdelivr.net/npm/stompjs@2.3.3/lib/stomp.min.js"></script><style>body {font-family: "Segoe UI", sans-serif;padding: 20px;}h2 {color: #2c3e50;}.result {margin-bottom: 10px;border: 1px solid #ddd;border-left: 5px solid #3498db;padding: 10px;background-color: #f9f9f9;}.module-name {font-weight: bold;color: #2980b9;}.data {margin-top: 5px;color: #333;}/*方式二使用*/.diagnosis-panel {border: 1px solid #ccc;margin-bottom: 12px;border-radius: 5px;padding: 8px;background-color: #fff;box-shadow: 0 2px 4px rgba(0,0,0,0.05);}summary {font-weight: bold;font-size: 16px;cursor: pointer;color: #2980b9;}summary span {font-size: 14px;color: #666;}.diagnosis-panel pre {max-height: 300px;overflow: auto;white-space: pre-wrap; /* 保留换行符同时允许长行自动换行 */word-wrap: break-word;}</style>
</head>
<body>
<h2>诊断模块实时结果</h2>
<div id="results"></div>
<script>const socket = new SockJS('http://192.168.0.18:5100/diagnosis-websocket');const stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {console.log('WebSocket connected:', frame);
stompClient.subscribe('/topic/diagnosis', function (message) {const payload = JSON.parse(message.body);const moduleName = payload.module;const data = payload.data;console.log('result:', data);});});
</script>
</body>
</html>