最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Vue3和SpringBoot實現(xiàn)Web實時消息推送功能

 更新時間:2025年05月22日 10:06:15   作者:知否技術(shù)  
這篇文章主要介紹了WebSocket實現(xiàn)實時通信,對比HTTP低效,通過SpringBoot+Vue整合實現(xiàn)消息推送,涵蓋聊天、股票等場景,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下

前言

先看演示效果:后端發(fā)送消息,前端實時展示

1. WebSocket

WebSocket 是一種常用的實現(xiàn) web 實時消息推送的技術(shù)。

我們先看**傳統(tǒng)網(wǎng)站(HTTP)**的缺點:

假設(shè)你打開一個股票網(wǎng)站,網(wǎng)頁會反復(fù)問服務(wù)器:“股價變了嗎?”(刷新請求) → 服務(wù)器:“沒變”(響應(yīng))... 過2秒網(wǎng)頁又問:“變了嗎?”... 服務(wù)器:“漲了!”

這就像你每隔2秒就打電話問朋友:“有消息嗎?” —— 效率低、費流量、延遲高。

WebSocket 是什么?

可以理解為你和服務(wù)器開了一個“專線通話”:

  • 首次連接時,用HTTP協(xié)議握手(打個招呼建立連接)

  • 連接保持不中斷,服務(wù)器可以隨時主動給你發(fā)消息,你也能隨時發(fā)消息給服務(wù)器

  • 實時雙向通信,不再需要反復(fù)問“有消息嗎?”

  • 就像你和朋友微信語音通話,接通后雙方隨時都能說話,不用掛斷重撥。

實際場景:

  • 聊天軟件(微信、釘釘):消息秒達,不用刷新頁面

  • 股票實時行情:股價變動立即推送到你屏幕

  • 協(xié)同編輯(如騰訊文檔):多人編輯時內(nèi)容實時同步

2. 環(huán)境搭建

在 Spring Boot 與 Vue 整合 WebSocket 消息通知的場景中,通常Spring Boot 項目作為服務(wù)端,而 Vue 項目作為客戶端。這種架構(gòu)設(shè)計的原因如下:

  • Spring Boot(服務(wù)端):負責消息處理、業(yè)務(wù)邏輯、數(shù)據(jù)持久化,以及與 WebSocket 客戶端的連接管理。

  • Vue(客戶端):通過瀏覽器提供用戶界面,并使用 JavaScript 的 WebSocket API 連接到服務(wù)端,接收和展示消息。

2.1 Vue 項目

在 Vue 項目中,我們使用 sockjs-client 和 stomp.js 庫來連接 WebSocket。

npm install sockjs-client stompjs

創(chuàng)建 websocket.js

import SockJS from "sockjs-client/dist/sockjs";
import Stomp from "stompjs";

let stompClient = null;

// 連接
export function connectWebSocket(type, notifyCallback, listRefreshCallback) {
  const socket = new SockJS("http://localhost:8083/zhifou-blog/ws-notification");
  stompClient = Stomp.over(socket);

  stompClient.connect({}, () => {
    // 訂閱新訂單
    if (type === "new-orders") {
      stompClient.subscribe("/topic/new-orders", (message) => {
        notifyCallback(message.body);
        listRefreshCallback();
      });
    }
    if (type === "return-orders") {
      // 訂閱退單
      stompClient.subscribe("/topic/return-orders", (message) => {
        notifyCallback(message.body);
        listRefreshCallback();
      });
    }
  });
}

// 關(guān)閉連接
export function disconnectWebSocket() {
  if (stompClient !== null) {
    stompClient.disconnect();
  }
}

2.2 SpringBoot 項目

添加依賴

<!-- websocket -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

WebSocket 配置類

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws-notification")
                .setAllowedOriginPatterns("*")// 允許跨域
                .withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        // 客戶端訂閱路徑前綴
        registry.enableSimpleBroker("/topic");
        // 客戶端發(fā)送消息的路徑前綴
        registry.setApplicationDestinationPrefixes("/app");
    }

}

3. 核心代碼

3.1 后端

// 注入依賴
@Autowired
private SimpMessagingTemplate simpMessagingTemplate;
// 發(fā)送消息
simpMessagingTemplate.convertAndSend("/topic/new-orders"",orderNumber);
// 向特定客戶發(fā)送消息
simpMessagingTemplate.convertAndSendToUser(userId, "/topic/notification", notification);

3.2 前端

import { onMounted, onBeforeUnmount, reactive, ref } from "vue";
import { ElMessage, ElMessageBox, ElNotification } from "element-plus";
import { connectWebSocket, disconnectWebSocket } from "../../../utils/websocket";
// Dom 掛載之后
onMounted(() => {
  // websocket鏈接
  connectWebSocket(
    "new-orders",
    (message) => {
      showNotification(message);
    },
    getOrderList
  );
});
// showNotification
const showNotification = (message) => {
  ElNotification({
    title: "新的訂單",
    type: "success",
    message: message,
  });
};

onBeforeUnmount(() => {
  disconnectWebSocket();
});

前端頁面顯示連接成功

以上就是基于Vue3和SpringBoot實現(xiàn)Web實時消息推送功能的詳細內(nèi)容,更多關(guān)于Vue3 SpringBoot Web消息推送的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue.js 獲取select中的value實例

    vue.js 獲取select中的value實例

    下面小編就為大家分享一篇vue.js 獲取select中的value實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 詳解vue3中如何使用youtube-player

    詳解vue3中如何使用youtube-player

    這篇文章主要為大家介紹了詳解vue3中如何使用youtube-player示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 基于uniapp+vue3?實現(xiàn)72小時倒計時功能

    基于uniapp+vue3?實現(xiàn)72小時倒計時功能

    數(shù)組項有一個下單時間?,比如今天下單在72小時內(nèi)可以繼續(xù)支付,超過則默認取消訂單,下面通過實例代碼介紹uniapp+vue3?實現(xiàn)72小時倒計時功能,感興趣的朋友一起看看吧
    2025-05-05
  • 解決vue-element-admin安裝依賴npm install報錯問題

    解決vue-element-admin安裝依賴npm install報錯問題

    這篇文章主要介紹了解決vue-element-admin安裝依賴npm install報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Vue3注冊全局組件的使用方法

    Vue3注冊全局組件的使用方法

    例如組件使用頻率非常高,幾乎每個頁面都在使用便可以封裝成全局組件,下面通過本文給大家介紹Vue3注冊全局組件的相關(guān)知識,感興趣的朋友一起看看吧
    2024-01-01
  • Vue3實現(xiàn)word轉(zhuǎn)成pdf代碼的方法

    Vue3實現(xiàn)word轉(zhuǎn)成pdf代碼的方法

    在Vue 3中,前端無法直接將Word文檔轉(zhuǎn)換為PDF,因為Word文檔的解析和PDF的生成通常需要在后端進行這篇文章主要介紹了Vue3實現(xiàn)word轉(zhuǎn)成pdf代碼的方法,需要的朋友可以參考下,
    2023-07-07
  • vue實現(xiàn)商城秒殺倒計時功能

    vue實現(xiàn)商城秒殺倒計時功能

    這篇文章主要介紹了vue實現(xiàn)商城秒殺倒計時功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 淺析Vue如何在頁面刷新時保留狀態(tài)信息

    淺析Vue如何在頁面刷新時保留狀態(tài)信息

    本文介紹了Vuex狀態(tài)持久化的兩種方案,重點解決了iOS端Safari瀏覽器中的兼容性問題,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下
    2026-04-04
  • Vue 項目中遇到的跨域問題及解決方法(后臺php)

    Vue 項目中遇到的跨域問題及解決方法(后臺php)

    這篇文章主要介紹了Vue 項目中遇到的跨域問題及解決方法(后臺php),前端采用vue框架,后臺php,具體解決方法,大家參考下本文
    2018-03-03
  • 基于vue v-for 多層循環(huán)嵌套獲取行數(shù)的方法

    基于vue v-for 多層循環(huán)嵌套獲取行數(shù)的方法

    今天小編就為大家分享一篇基于vue v-for 多層循環(huán)嵌套獲取行數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09

最新評論

铁岭县| 上栗县| 和田市| 武功县| 麻城市| 西乡县| 辛集市| 嘉义县| 那曲县| 淳化县| 靖远县| 来凤县| 错那县| 兴海县| 涞源县| 通海县| 临高县| 会同县| 永昌县| 马尔康县| 曲沃县| 称多县| 贡觉县| 永州市| 白朗县| 泰和县| 通化市| 樟树市| 灵寿县| 开平市| 伊吾县| 黔西| 清徐县| 洪泽县| 昌邑市| 玉田县| 台东县| 玛多县| 瑞金市| 夏河县| 宁明县|