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

前端vue3使用SSE、EventSource攜帶請(qǐng)求頭實(shí)例代碼

 更新時(shí)間:2025年06月23日 08:39:05   作者:alikami  
這篇文章主要介紹了前端vue3使用SSE、EventSource攜帶請(qǐng)求頭的相關(guān)資料,SSE是基于HTTP的服務(wù)器向客戶端推送數(shù)據(jù)技術(shù),實(shí)現(xiàn)單向?qū)崟r(shí)通信,輕量級(jí)且支持跨域、自動(dòng)重連,文中將實(shí)現(xiàn)的方法介紹的非常詳細(xì),需要的朋友可以參考下

一、SSE介紹

1. 定義

SSE(Server-Sent Events)是一種基于 HTTP 協(xié)議,用于實(shí)現(xiàn)服務(wù)器主動(dòng)向客戶端推送數(shù)據(jù)的技術(shù)。它在客戶端與服務(wù)器之間建立一條持久化連接,并通過(guò)這條連接實(shí)現(xiàn)服務(wù)器向客戶端的實(shí)時(shí)數(shù)據(jù)推送,而客戶端不能發(fā)送數(shù)據(jù)給服務(wù)端。

總之——SSE是一種允許服務(wù)器向客戶端單向發(fā)送數(shù)據(jù)的技術(shù)。

2. 特點(diǎn)

  • 單向通信
  • 實(shí)時(shí)推送
  • 輕量級(jí)
  • 支持跨域、使用簡(jiǎn)單、支持自動(dòng)重連

3. 適合場(chǎng)景

  • 數(shù)據(jù)大屏
  • 消息推送
  • 股票交易
  • 在線聊天
  • ...

二、SSE使用

1. 建立最基本的SSE連接,需要用到  EventSource

EventSource接口是Web內(nèi)容與服務(wù)器發(fā)送事件通信的接口。

一個(gè)EventSource實(shí)例向HTTP服務(wù)器開(kāi)啟一個(gè)持久化的連接,以text/event-stream格式發(fā)送事件,此連接會(huì)一直保持開(kāi)啟直到通過(guò)調(diào)用EventSource.close()關(guān)閉。

示例:在一個(gè)vue的頁(yè)面中

const initSSE = () => {
    eventSource = new EventSource('http://地址');

    eventSource.onmessage = (event) => {
        console.log("收到消息內(nèi)容是:", event.data)
    };

    eventSource.onerror = (error) => {
        console.error("SSE 連接出錯(cuò):", error);
        eventSource.close();
    };
}

onMounted(() => {
    initSSE();
});

onUnmounted(() => {
    if (eventSource) {
        eventSource.close();
    }
});

2. EventSource的事件

open在與事件源的連接打開(kāi)時(shí)觸發(fā)
message在從事件源接收到數(shù)據(jù)時(shí)觸發(fā)
error在事件源連接未能打開(kāi)時(shí)觸發(fā)
具名事件

當(dāng)從服務(wù)器端接收到指定了event字段的事件時(shí)觸發(fā),這將創(chuàng)建一個(gè)以該鍵值為值的特定事件

3. 建立SSE連接的時(shí)候攜帶token

如果想要在建立SSE連接的時(shí)候攜帶token,需要用到 event-source-polyfill

EventSourcePolyfill 是 EventSource 封裝好了的一個(gè)方法,可以直接配置請(qǐng)求頭

首先安裝依賴

npm install event-source-polyfill --save

項(xiàng)目中使用,完整的封裝代碼如下  sse.js 文件

import {getToken} from "@/utils/auth";
import {EventSourcePolyfill} from "event-source-polyfill";

let eventSource = null;
let reconnectAttempts = 0; // 重連次數(shù)

export default function subscribeWarnMsg(proxy, url) {
    if (eventSource) {
        console.log("sse已經(jīng)存在:", eventSource);
        return eventSource;
    } else {
        eventSource = new EventSourcePolyfill(import.meta.env.VITE_APP_BASE_API + url, {
            heartbeatTimeout: 3 * 60 * 1000,
            headers: {
                Authorization: 'Bearer ' + getToken(),
                Accept: 'text/event-stream'
            },
            withCredentials: true,
        })
        eventSource.onopen = function (e) {
            console.log(e, "連接剛打開(kāi)時(shí)觸發(fā)");
            reconnectAttempts = 0; // 重置重連次數(shù)
        };
        eventSource.onmessage = (event) => {
            console.log("收到消息內(nèi)容是:", event.data)
        };
        eventSource.onerror = (event) => {
            console.error("SSE 連接出錯(cuò):", event);
            eventSource.close(); // 關(guān)閉連接
            eventSource = null;
            // 自動(dòng)重連邏輯
            reconnectAttempts++;
            const reconnectDelay = Math.min(30000, 1000 * Math.pow(2, reconnectAttempts)); // 計(jì)算重連延遲,最大延遲為30秒
            console.log(`將在 ${reconnectDelay} 毫秒后嘗試重連...`);
            // 等待一定時(shí)間后重連
            setTimeout(() => {
                if (!eventSource) {
                    console.log("嘗試重連 SSE...");
                    subscribeWarnMsg(proxy, url); // 遞歸調(diào)用重連
                }
            }, reconnectDelay);
        }
        return eventSource;
    }
}

頁(yè)面中使用  test.vue 文件

import subscribeWarnMsg from '@/../sse'
const {proxy} = getCurrentInstance();

const sse = ref()

function initSSE() {
  sse.value = subscribeWarnMsg(proxy, `/system/sse/connect`);
  sse.value.onmessage = async (event) => {
    info.value = await JSON.parse(event.data)
  }
}

onMounted(() => {
  initSSE();
});

onUnmounted(() => {
  sse.value.close()
});

總結(jié) 

到此這篇關(guān)于前端vue3使用SSE、EventSource攜帶請(qǐng)求頭的文章就介紹到這了,更多相關(guān)前端vue3 SSE攜帶請(qǐng)求頭內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue實(shí)現(xiàn)輪播圖組件的封裝

    Vue實(shí)現(xiàn)輪播圖組件的封裝

    Vue輪播圖組件的封裝可通過(guò)封裝組件、使用插件、配置化等方式實(shí)現(xiàn),主要包括圖片預(yù)加載、定時(shí)輪播、無(wú)限滾動(dòng)、手勢(shì)滑動(dòng)、響應(yīng)式布局等功能,實(shí)現(xiàn)方式可使用Vue的生命周期函數(shù)、自定義事件、計(jì)算屬性等技術(shù)
    2023-04-04
  • 用了這么久的Vue3你真的了解Proxy了嗎

    用了這么久的Vue3你真的了解Proxy了嗎

    Proxy是ES6引入的一個(gè)新特性,它允許你創(chuàng)建一個(gè)代理對(duì)象,用于攔截對(duì)目標(biāo)對(duì)象的訪問(wèn),但用了這么久的vue3,你真的懂Proxy嗎,本文就來(lái)和大家深入聊聊Proxy吧
    2023-06-06
  • vue兩個(gè)組件間值的傳遞或修改方式

    vue兩個(gè)組件間值的傳遞或修改方式

    這篇文章主要介紹了vue兩個(gè)組件間值的傳遞或修改的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • Vue 同步異步存值取值實(shí)現(xiàn)案例

    Vue 同步異步存值取值實(shí)現(xiàn)案例

    這篇文章主要介紹了Vue 同步異步存值取值實(shí)現(xiàn)案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Vue3中路由跳轉(zhuǎn)優(yōu)化技巧分享

    Vue3中路由跳轉(zhuǎn)優(yōu)化技巧分享

    這篇文章主要為大家詳細(xì)介紹了Vue3中路由跳轉(zhuǎn)的相關(guān)優(yōu)化技巧,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-07-07
  • Element-ui tree組件自定義節(jié)點(diǎn)使用方法代碼詳解

    Element-ui tree組件自定義節(jié)點(diǎn)使用方法代碼詳解

    本文通過(guò)實(shí)例代碼給大家介紹了Element-ui tree組件自定義節(jié)點(diǎn)使用方法 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • vue中如何實(shí)現(xiàn)變量和字符串拼接

    vue中如何實(shí)現(xiàn)變量和字符串拼接

    這篇文章主要介紹了vue中如何實(shí)現(xiàn)變量和字符串拼接,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • vue element upload實(shí)現(xiàn)圖片本地預(yù)覽

    vue element upload實(shí)現(xiàn)圖片本地預(yù)覽

    這篇文章主要為大家詳細(xì)介紹了vue element upload實(shí)現(xiàn)圖片本地預(yù)覽,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 解讀vue項(xiàng)目中遇到的深拷貝淺拷貝問(wèn)題

    解讀vue項(xiàng)目中遇到的深拷貝淺拷貝問(wèn)題

    這篇文章主要介紹了vue項(xiàng)目中遇到的深拷貝淺拷貝問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 教你如何使用VUE組件創(chuàng)建SpreadJS自定義單元格

    教你如何使用VUE組件創(chuàng)建SpreadJS自定義單元格

    這篇文章主要介紹了使用VUE組件創(chuàng)建SpreadJS自定義單元格的方法,通常我們使用組件的方式是,在實(shí)例化Vue對(duì)象之前,通過(guò)Vue.component方法來(lái)注冊(cè)全局的組件,文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-01-01

最新評(píng)論

香港| 二连浩特市| 富平县| 甘肃省| 怀仁县| 滦南县| 灵宝市| 辛集市| 辛集市| 德州市| 云浮市| 玉环县| 绵竹市| 旅游| 文登市| 和林格尔县| 秦安县| 庆安县| 伊宁县| 甘孜县| 稻城县| 天津市| 巴林左旗| 江华| 如皋市| 马公市| 乌拉特后旗| 彭泽县| 揭阳市| 寻乌县| 龙岩市| 克什克腾旗| 闵行区| 霍州市| 西峡县| 柏乡县| 龙门县| 台前县| 溧水县| 鄢陵县| 武宣县|