当前位置: 首页 > news >正文

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>
​

http://www.dtcms.com/a/267256.html

相关文章:

  • 软著难不难,申请
  • cocos 打包安卓
  • 《Redis》哨兵模式
  • 安达发|APS自动排产软件与服装行业的深度融合:智能制造时代的效率革命
  • 图灵完备之路(数电学习三分钟)----解码器
  • PI 控制器与 PR 控制器的等效转换与应用详解
  • 【深度学习】神经网络剪枝方法的分类
  • 【openp2p】 学习2:源码阅读P2PNetwork和P2PTunnel
  • 深入解读 Java CompletableFuture:设计原理与源码分析
  • [Cyclone] docs | 主程序逻辑 | 地址解码器 | P2PKH地址
  • Python 机器学习核心入门与实战进阶 Day 3 - 决策树 随机森林模型实战
  • TailWind CSS Intellisense 插件在VSCode 上不生效
  • 蓝桥杯51单片机设计
  • 在VMware虚拟机中安装Windows 98时,Explorer提示“该程序执行了非法操作,即将关闭”的解决办法
  • PADS交互式布局
  • SwiftUI 7(iOS 26)中玻璃化工具栏的艺术
  • Qt开发:QListWidget的介绍和使用
  • Java面试宝典:BIO、NIO、AIO原理演进与实际应用深度实践
  • Ubuntu 安装 etcd 与 etcd-cpp-apiv3
  • 开发三维CAD:实现框选和反选功能
  • 翻译《The Old New Thing》- Windows 媒体目录中 onestop.mid 文件的故事
  • mybatis-plus-01-环境初始化及简单应用
  • 基于uni-app的书法学习管理小程序的设计与实现
  • Java IO相关技术小结
  • SpringCloud系列(51)--SpringCloud Stream之使用分组解决消息重复消费问题
  • 你的Prompt还有很大提升
  • PyTorch中 item()、tolist()使用详解和实战示例
  • 企业微信iPad协议端强制拉群漏洞深度分析
  • Scrapy进阶封装(第四阶段:中间件设置,动态UA,ip代理池)
  • 【STM32实践篇】:GPIO 详解