欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端vue3使用SSE、EventSource攜帶請求頭實例代碼

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

一、SSE介紹

1. 定義

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

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

2. 特點

  • 單向通信
  • 實時推送
  • 輕量級
  • 支持跨域、使用簡單、支持自動重連

3. 適合場景

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

二、SSE使用

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

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

一個EventSource實例向HTTP服務器開啟一個持久化的連接,以text/event-stream格式發(fā)送事件,此連接會一直保持開啟直到通過調用EventSource.close()關閉。

示例:在一個vue的頁面中

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

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

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

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

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

2. EventSource的事件

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

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

3. 建立SSE連接的時候攜帶token

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

EventSourcePolyfill 是 EventSource 封裝好了的一個方法,可以直接配置請求頭

首先安裝依賴

npm install event-source-polyfill --save

項目中使用,完整的封裝代碼如下  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, "連接剛打開時觸發(fā)");
            reconnectAttempts = 0; // 重置重連次數(shù)
        };
        eventSource.onmessage = (event) => {
            console.log("收到消息內容是:", event.data)
        };
        eventSource.onerror = (event) => {
            console.error("SSE 連接出錯:", event);
            eventSource.close(); // 關閉連接
            eventSource = null;
            // 自動重連邏輯
            reconnectAttempts++;
            const reconnectDelay = Math.min(30000, 1000 * Math.pow(2, reconnectAttempts)); // 計算重連延遲,最大延遲為30秒
            console.log(`將在 ${reconnectDelay} 毫秒后嘗試重連...`);
            // 等待一定時間后重連
            setTimeout(() => {
                if (!eventSource) {
                    console.log("嘗試重連 SSE...");
                    subscribeWarnMsg(proxy, url); // 遞歸調用重連
                }
            }, reconnectDelay);
        }
        return eventSource;
    }
}

頁面中使用  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()
});

總結 

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

相關文章

  • vue?scoped與深度選擇器deep的原理分析

    vue?scoped與深度選擇器deep的原理分析

    這篇文章主要介紹了vue?scoped與深度選擇器deep的原理分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • element el-table表格的二次封裝實現(xiàn)(附表格高度自適應)

    element el-table表格的二次封裝實現(xiàn)(附表格高度自適應)

    這篇文章主要介紹了element el-table表格的二次封裝實現(xiàn)(附表格高度自適應),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Vue3+element實現(xiàn)表格數(shù)據(jù)導出

    Vue3+element實現(xiàn)表格數(shù)據(jù)導出

    這篇文章主要為大家學習介紹了Vue3如何利用element實現(xiàn)表格數(shù)據(jù)導出功能,文中的示例代碼講解詳細,感興趣的小伙伴快跟隨小編一起學習一下吧
    2023-07-07
  • vue中this.$refs.name.offsetHeight獲取不到值問題

    vue中this.$refs.name.offsetHeight獲取不到值問題

    這篇文章主要介紹了vue中this.$refs.name.offsetHeight獲取不到值問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 基于Vue2.0的分頁組件

    基于Vue2.0的分頁組件

    這篇文章主要為大家詳細介紹了基于Vue2.0的分頁組件的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • vue-baidu-map實現(xiàn)區(qū)域圈線和路徑的漸變色

    vue-baidu-map實現(xiàn)區(qū)域圈線和路徑的漸變色

    這篇文章主要介紹了vue-baidu-map實現(xiàn)區(qū)域圈線和路徑的漸變色方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 基于vue實現(xiàn)微博三方登錄流程解析

    基于vue實現(xiàn)微博三方登錄流程解析

    這篇文章主要介紹了基于vue實現(xiàn)微博三方登錄流程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • vue中項目頁面空白但不報錯產生的原因及分析

    vue中項目頁面空白但不報錯產生的原因及分析

    這篇文章主要介紹了vue中項目頁面空白但不報錯產生的原因及分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 淺談vue2 單頁面如何設置網(wǎng)頁title

    淺談vue2 單頁面如何設置網(wǎng)頁title

    這篇文章主要介紹了淺談vue2 單頁面如何設置網(wǎng)頁title,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Vue中比較流行且好用的組件使用示例

    Vue中比較流行且好用的組件使用示例

    這篇文章主要介紹了Vue中比較流行且好用的一些組件使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08

最新評論