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 {
    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }
​
    @Override
    public 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 {
    @Autowired
    private SimpMessagingTemplate messagingTemplate;
    @Override
    public 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

@Autowired
    WebSocketService 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>
​

Spring Boot 应用中集成 WebSocket 可以让您的应用程序实现实时通信功能,比如聊天室、在线通知等。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,使得客户端和服务器之间能够进行持久性的双向数据交换。 下面是Spring Boot应用WebSocket的基本步骤: 1. 添加依赖:在`pom.xml`或`build.gradle`文件中添加Spring Websocket的相关依赖,如Spring Framework WebSocket库。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. 配置WebSocket:在Spring Boot配置类中启用WebSocket,并设置一个处理程序(`@MessageMapping`)来接收和响应消息。 ```java @Configuration @EnableWebSockets public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(webSocketMessageHandler(), "/chat"); } @Bean public WebSocketHandler webSocketMessageHandler() { return new TextWebSocketHandler(); } } ``` 这里创建了一个`TextWebSocketHandler`实例,它可以处理文本类型的消息。 3. 创建WebSocket处理类:继承自`WebSocketSession`接口或实现WebSocketHandler接口,编写处理用户连接、断开以及消息发送的方法。 ```java @Component public class ChatWebSocketHandler extends TextWebSocketHandler { // 在onOpen(), onMessage(), onClose(), onError()方法中处理连接、接收和发送消息 } ``` 4. 使用WebSocket连接:客户端可以通过JavaScript的WebSocket API建立到服务器的连接,然后发送和接收消息。 5. 测试:使用支持WebSocket的浏览器或第三方库(如AngularJS、Vue.js等)创建前端应用并与后端进行交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值