ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Springboot应用WebSocket服务测试

2026/8/25 11:32:05 拓冰建站 浏览量
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>
​