精品一区二区三区在线成人,欧美精产国品一二三区,Ji大巴进入女人66h,亚洲春色在线视频

告別掉線!SpringBoot+WebSocket打造超穩定實時監控!

安全 應用安全
我們可以看到 WebSocket 在實時通訊中的強大能力,使用 Spring Boot 構建的 WebSocket 服務端具備了良好的擴展性和穩定性,非常適合處理這種實時性要求較高的業務場景。

在現代化的系統架構中,實時監控無疑是提升效率和確保業務順暢運行的關鍵之一。尤其是在設備巡檢等場景中,實時監控系統可以確保及時發現問題并快速響應。本文將結合 SpringBoot + WebSocket 技術,深入探討如何構建一個超穩定的實時監控系統,實時接收設備巡檢的異常信息,并在監控界面上及時更新設備狀態。

我們將詳細講解如何通過 WebSocket 實現服務器主動向客戶端推送消息,確保監控系統能夠實時反映設備狀態的變化。通過一個簡單的示例,我們將實現一個消防設備巡檢系統,后臺服務可實時向前端頁面發送設備異常信息,并通過 WebSocket 將這些信息推送到監控頁面,實時更新設備狀態。

整體架構

在本項目中,我們采用 Spring Boot 作為后端開發框架,結合 WebSocket 實現實時消息推送。前端則使用 Vue 和 Element,并通過 WebSocket 與后端建立實時通信連接。當設備發生異常時,前端會根據 WebSocket 推送的數據動態更新設備狀態。

項目結構

  1. 前端: 基于 Vue 和 Element 實現的設備巡檢頁面,用戶可以通過頁面查看各設備的狀態并接收異常信息。
  2. 后端: 使用 Spring Boot 構建 WebSocket 服務端,并通過 @ServerEndpoint 注解創建 WebSocket 連接,實現與客戶端的實時消息推送。

實現步驟

配置 Spring Boot WebSocket 服務端

配置 application.yml 配置文件
# application.yml 配置
server:
  port: 18801


mySocket:
  myPwd: jae_123  # WebSocket 密碼校驗
WebSocket 配置類

在 Spring Boot 項目中,我們需要創建一個配置類來啟用 WebSocket。

package com.icoderoad.websocket;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;


@Configuration
public class WebSocketConfig {


    /**
     * 注入一個 ServerEndpointExporter, 該 Bean 會自動注冊使用 @ServerEndpoint 注解聲明的 WebSocket endpoint
     */
    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }
}
 WebSocket 服務端類

WebSocket 服務端類負責處理客戶端連接、消息發送和關閉連接等操作。

package com.icoderoad.websocket;


import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicInteger;


@ServerEndpoint("/webSocket/{uid}")
@Component
public class WebSocketServer {


    private static final AtomicInteger onlineNum = new AtomicInteger(0);
    private static final CopyOnWriteArraySet<Session> sessionPools = new CopyOnWriteArraySet<>();


    @OnOpen
    public void onOpen(Session session, @PathParam("uid") String uid) {
        sessionPools.add(session);
        onlineNum.incrementAndGet();
    }


    @OnClose
    public void onClose(Session session) {
        sessionPools.remove(session);
        onlineNum.decrementAndGet();
    }


    public void sendMessage(Session session, String message) throws IOException {
        if (session != null) {
            session.getBasicRemote().sendText(message);
        }
    }


    public void broadCastInfo(String message) throws IOException {
        for (Session session : sessionPools) {
            if (session.isOpen()) {
                sendMessage(session, message);
            }
        }
    }


    @OnError
    public void onError(Session session, Throwable throwable) {
        throwable.printStackTrace();
    }
}

WebSocket Controller 處理前端請求

控制器類負責接收來自客戶端的請求,并通過 WebSocket 向所有連接的客戶端廣播消息。

package com.icoderoad.websocket;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


import java.io.IOException;


@RestController
@RequestMapping("/open/socket")
public class WebSocketController {


    @Value("${mySocket.myPwd}")
    private String myPwd;


    @Autowired
    private WebSocketServer webSocketServer;


    @PostMapping("/onReceive")
    public void onReceive(String id, String pwd) throws IOException {
        if (pwd.equals(myPwd)) {
            webSocketServer.broadCastInfo(id);  // 廣播異常設備ID
        }
    }
}

前端實現:Vue + WebSocket

前端頁面采用 Vue 和 WebSocket 進行實時通信。

前端 HTML 和 Vue 代碼

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>實時監控</title>
</head>
<style>
    .item {
        display: flex;
        border-bottom: 1px solid #000000;
        justify-content: space-between;
        width: 30%;
        line-height: 50px;
        height: 50px;
    }


    .item span:nth-child(2){
        margin-right: 10px;
        margin-top: 15px;
        width: 20px;
        height: 20px;
        border-radius: 50%;
        background: #55ff00;
    }


    .nowI {
        background: #ff0000 !important;
    }
</style>
<body>
    <div id="app">
        <div v-for="item in list" class="item">
            <span>{{item.id}}.{{item.name}}</span>
            <span :class="item.state == -1 ? 'nowI' : ''"></span>
        </div>
    </div>
</body>
<script src="./js/vue.min.js"></script>
<script type="text/javascript">
    var vm = new Vue({
        el: "#app",
        data: {
            list: [
                {id: 1, name: '張三', state: 1},
                {id: 2, name: '李四', state: 1},
                {id: 3, name: '王五', state: 1},
                {id: 4, name: '韓梅梅', state: 1},
                {id: 5, name: '李磊', state: 1},
            ]
        }
    });


    var webSocket = new WebSocket("ws://localhost:18801/webSocket/" + getUUID());


    webSocket.onopen = function () {
        console.log("已連接");
    };


    webSocket.onmessage = function (msg) {
        var serverMsg = msg.data;
        var t_id = parseInt(serverMsg); // 服務端發過來的消息,ID,string需轉化為int類型才能比較
        for (var i = 0; i < vm.list.length; i++) {
            var item = vm.list[i];
            if (item.id == t_id) {
                item.state = -1;
                vm.list.splice(i, 1, item);
                break;
            }
        }
    };


    webSocket.onclose = function () {
        console.log("websocket已關閉");
    };


    webSocket.onerror = function () {
        console.log("websocket發生了錯誤");
    };


    function getUUID() {
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
            var r = Math.random() * 16 | 0,
                v = c == 'x' ? r : (r & 0x3 | 0x8);
            return v.toString(16);
        });
    }
</script>
</html>

測試與結果

  1. 打開前端頁面: 在瀏覽器中打開監控頁面,WebSocket 會自動連接服務器并輸出連接成功的日志。
  2. 提交異常數據: 使用 Postman 等接口測試工具向后端發送設備異常數據,設備 ID 為 3 的設備狀態會變為紅色(表示異常)。

結論

通過 Spring Boot 和 WebSocket 的結合,成功實現了一個實時監控系統。在這個系統中,服務端能夠主動向客戶端推送消息,確保監控數據實時更新。利用 WebSocket 技術,我們可以實現高效、穩定、低延遲的實時通信,使得設備異常能夠快速傳遞到監控平臺,提高工作效率和安全性。這種基于 WebSocket 的實時監控方案,不僅適用于設備巡檢場景,還可以擴展應用到其他需要實時反饋的系統中。

通過本文的實踐,我們可以看到 WebSocket 在實時通訊中的強大能力,使用 Spring Boot 構建的 WebSocket 服務端具備了良好的擴展性和穩定性,非常適合處理這種實時性要求較高的業務場景。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2025-07-14 05:00:00

監控系統工具

2018-09-27 08:59:29

2023-08-09 08:01:00

WebSockett服務器web

2025-07-09 07:36:22

Spring系統設計限流

2014-03-25 14:21:18

WebSocket實時

2022-07-26 14:53:10

WebSocket網絡通信協議

2015-10-27 17:52:40

華為

2009-12-25 09:39:08

ADSL MODEM

2012-12-17 11:32:53

無線路由器WLAN

2013-09-26 21:50:11

RIILIT綜合監控

2021-06-18 12:13:01

Android開發者LayoutInspe

2025-02-12 10:29:13

2025-08-15 07:36:48

彈幕系統Spring

2023-09-06 08:46:47

2025-06-26 04:10:00

2013-04-12 10:05:49

HTML5WebSocket

2023-11-17 09:35:58

2010-07-06 22:39:16

虛擬交換技術校園網絡思科

2021-03-25 08:29:33

SpringBootWebSocket即時消息

2024-03-19 08:45:45

WebSocketSpring應用開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 宁南县| 河曲县| 沅江市| 瓦房店市| 开江县| 保靖县| 平阳县| 高邮市| 南通市| 财经| 博白县| 通化县| 芷江| 永德县| 镇巴县| 阜南县| 泾川县| 安新县| 宁河县| 凤城市| 金坛市| 金华市| 永丰县| 句容市| 衡水市| 高雄县| 苍溪县| 湖南省| 郑州市| 随州市| 新巴尔虎左旗| 明水县| 聂拉木县| 越西县| 永康市| 宝山区| 慈利县| 吉安县| 英德市| 汝州市| 水城县|