国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue設(shè)置全局webSocket,并在對(duì)應(yīng)頁(yè)面接受消息通知處理

這篇具有很好參考價(jià)值的文章主要介紹了vue設(shè)置全局webSocket,并在對(duì)應(yīng)頁(yè)面接受消息通知處理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

最近項(xiàng)目中有用到了webSocket,然后在收到消息之后需要在不同的頁(yè)面進(jìn)行處理。所有就需要在不同的頁(yè)面監(jiān)聽(tīng)并進(jìn)行對(duì)應(yīng)的消息處理。

首先,在app.vue中添加socket初始化,并設(shè)置發(fā)送消息,接收消息和心跳檢測(cè)的處理。

// App.vue
export default {
	data() {
		return {
			// socket參數(shù)
			socket: null,
			timeout: 10 * 1000, // 45秒一次心跳
			timeoutObj: null, // 心跳心跳倒計(jì)時(shí)
			serverTimeoutObj: null, // 心跳倒計(jì)時(shí)
			timeoutnum: null, // 斷開(kāi) 重連倒計(jì)時(shí)
			lockReconnect: false, // 防止
			websocket: null
		};
	},
    mounted() {
		this.initWebSocket(userId); // userId為socket鏈接的參數(shù)
	},
    methods:{
        initWebSocket(supplierId) {
			// WebSocket與普通的請(qǐng)求所用協(xié)議有所不同,ws等同于http,wss等同于https
			let wsUrl = `wss://192.168.1.33/rest/supplier-api/wss/websocket/${userId}`;
			this.websocket = new WebSocket(wsUrl);
			this.websocket.onopen = this.websocketonopen;
			this.websocket.onerror = this.websocketonerror;
			this.websocket.onmessage = this.setOnmessageMessage;
			this.websocket.onclose = this.websocketclose;
            // 監(jiān)聽(tīng)窗口關(guān)閉事件,當(dāng)窗口關(guān)閉時(shí),主動(dòng)去關(guān)閉websocket連接,防止連接還沒(méi)斷開(kāi)就關(guān)閉窗口,server端會(huì)拋異常。
            // window.onbeforeunload = that.onbeforeunload
		},
		start() {
			console.log('start');
			//清除延時(shí)器
			this.timeoutObj && clearTimeout(this.timeoutObj);
			this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj);
			this.timeoutObj = setTimeout(() => {
				if (this.websocket && this.websocket.readyState == 1) {
					this.websocket.send('heartBath');//發(fā)送消息,服務(wù)端返回信息,即表示連接良好,可以在socket的onmessage事件重置心跳機(jī)制函數(shù)
				} else {
					this.reconnect();
				}
				//定義一個(gè)延時(shí)器等待服務(wù)器響應(yīng),若超時(shí),則關(guān)閉連接,重新請(qǐng)求server建立socket連接
				this.serverTimeoutObj = setTimeout(() => {
					this.websocket.close();
				}, this.timeout)
			}, this.timeout)
		},
		reset() { // 重置心跳
			// 清除時(shí)間
			clearTimeout(this.timeoutObj);
			clearTimeout(this.serverTimeoutObj);
			// 重啟心跳
			this.start();
		},
		// 重新連接
        reconnect() {
			if (this.lockReconnect) return
			this.lockReconnect = true;
			//沒(méi)連接上會(huì)一直重連,設(shè)置延遲避免請(qǐng)求過(guò)多
            this.timeoutnum && clearTimeout(this.timeoutnum);
            this.timeoutnum = setTimeout(() => {
				this.initWebSocket();
                this.lockReconnect = false;
            }, 5000)
        },
		async setOnmessageMessage(event) {
			console.log(event.data, '獲得消息');
			this.reset();
			// 自定義全局監(jiān)聽(tīng)事件
			window.dispatchEvent(new CustomEvent('onmessageWS', {
				detail: {
					data: event.data
				}
			}))
			// //發(fā)現(xiàn)消息進(jìn)入    開(kāi)始處理前端觸發(fā)邏輯
			// if (event.data === 'success' || event.data === 'heartBath') return
        },
		websocketonopen() {
            //開(kāi)啟心跳
            this.start();
            console.log("WebSocket連接成功!!!"+new Date()+"----"+this.websocket.readyState);
		},
		websocketonerror(e) {                
			console.log("WebSocket連接發(fā)生錯(cuò)誤" + e);              
		},
		websocketclose(e) {
            this.websocket.close();
            clearTimeout(this.timeoutObj);
			clearTimeout(this.serverTimeoutObj);
            console.log("WebSocket連接關(guān)閉");
		},
        websocketsend(messsage) {
            that.websocket.send(messsage)
        },
        closeWebSocket() { // 關(guān)閉websocket
            that.websocket.close()
        },
    }

其中:在接收到消息之后需要自定一個(gè)監(jiān)聽(tīng)事件,來(lái)供頁(yè)面去監(jiān)聽(tīng)消息通知。

async setOnmessageMessage(event) {
	console.log(event.data, '獲得消息');
	this.reset();
	// 自定義全局監(jiān)聽(tīng)事件
	window.dispatchEvent(new CustomEvent('onmessageWS', {
		detail: {
			data: event.data
		}
	}))
	// //發(fā)現(xiàn)消息進(jìn)入    開(kāi)始處理前端觸發(fā)邏輯
	// if (event.data === 'success' || event.data === 'heartBath') return
},

最后在需要使用的頁(yè)面添加監(jiān)聽(tīng)事件

mounted () {
	// 添加socket通知監(jiān)聽(tīng)
	window.addEventListener('onmessageWS', this.getSocketData)
},
methods: {
    // 收到消息處理
	getSocketData (res) {
		if (res.detail.data === 'success' || res.detail.data === 'heartBath') return
		// ...業(yè)務(wù)處理
	},
}

至此,vue配置全局socket的需求就完成了。歡迎大佬們一起討論文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-512458.html

到了這里,關(guān)于vue設(shè)置全局webSocket,并在對(duì)應(yīng)頁(yè)面接受消息通知處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微信小程序統(tǒng)一分享,全局接管頁(yè)面分享消息的一些技巧

    前言 最近都在折騰自己的個(gè)人內(nèi)容聚合小程序。除了作為原創(chuàng)專(zhuān)欄,視頻教程的聚合。我有什么新的想法,產(chǎn)品創(chuàng)意,最終落地的東西都會(huì)放到這個(gè)小程序里。 而分享功能非常的重要,當(dāng)某一個(gè)功能或文章打動(dòng)用戶的時(shí)候,能把這個(gè)小程序分享出去,就能帶來(lái)裂變傳播的效

    2024年02月15日
    瀏覽(25)
  • Vue3封裝全局WebSocket;全局可監(jiān)聽(tīng)、可發(fā)送、心跳處理等;

    操作如下 可以在多個(gè)頁(yè)面多個(gè)組件中進(jìn)行監(jiān)聽(tīng)/發(fā)送 代碼簡(jiǎn)介 方便; 首先安裝 tools-javascript 以及 tools-vue3 根據(jù)你的業(yè)務(wù)需求初始化 ws 在你的任何文件中直接調(diào)用即可 附加篇(也可不讀 直接看文檔 )

    2024年02月11日
    瀏覽(20)
  • 微信小程序全局分享轉(zhuǎn)發(fā)實(shí)現(xiàn)-無(wú)需頁(yè)面單獨(dú)設(shè)置

    微信小程序沒(méi)有自帶全局分享設(shè)置,頁(yè)面開(kāi)啟分享功能必須要在頁(yè)面中定義分享事件函數(shù)onShareAppMessage(分享給朋友)和onShareTimeline(分享至朋友圈)。如果項(xiàng)目中頁(yè)面比較多,一個(gè)個(gè)去設(shè)置無(wú)疑是非常麻煩的,因此全局設(shè)置就非常有必要了。 此時(shí)我們將代碼放在app.js中,注

    2024年02月16日
    瀏覽(29)
  • Vue 項(xiàng)目中使用WebSocket 消息推送

    Vue 項(xiàng)目中使用WebSocket 消息推送

    1.這是我在后臺(tái)管理項(xiàng)目中使用到的,主要的作用是搞一個(gè)消息提醒的功能。 2.主要有右上角的提示和有下角的消息彈框。 3.主要實(shí)現(xiàn)的功能是如果用戶有未讀的消息,那么首次登錄就彈框,如果用戶關(guān)閉了頁(yè)面,那么再次刷新頁(yè)面的時(shí)候,也不再?gòu)椏?,意思就是一個(gè)賬戶沒(méi)

    2024年02月11日
    瀏覽(23)
  • 【Vue項(xiàng)目實(shí)戰(zhàn)】之WebSocket消息監(jiān)聽(tīng)

    【Vue項(xiàng)目實(shí)戰(zhàn)】之WebSocket消息監(jiān)聽(tīng)

    前言 哈嘍!CSDN! 很久以前有位好朋友就建議來(lái)CSDN做一些筆記,直到最近又被提醒了一次,這次終于想起來(lái)了, 好習(xí)慣還是需要一個(gè)好的開(kāi)始 ╭(●`?′●)╯,感謝這位好朋友讓我擁有這個(gè)好習(xí)慣 ╭(′▽ )╭(′▽ )╯ 這位好朋友的博客鏈接如下: 點(diǎn)擊進(jìn)入 由于業(yè)務(wù)需求

    2024年01月17日
    瀏覽(18)
  • 本地存儲(chǔ)、自定義事件、全局事件總線、消息訂閱與發(fā)布【Vue】

    本地存儲(chǔ)、自定義事件、全局事件總線、消息訂閱與發(fā)布【Vue】

    存儲(chǔ)內(nèi)容大小一般支持5MB左右(不同瀏覽器可能還不一樣) 瀏覽器通過(guò) Window.sessionStorage 和 Window.localStorage 屬性來(lái)實(shí)現(xiàn)本地存儲(chǔ)機(jī)制 相關(guān)API: (1) xxxxStorage.setItem(\\\'key\\\', \\\'value\\\'); 該方法接受一個(gè)鍵和值作為參數(shù),會(huì)把鍵值對(duì)添加到存儲(chǔ)中,如果鍵名存在,則更新其對(duì)應(yīng)的值。

    2023年04月21日
    瀏覽(25)
  • SpringBoot實(shí)現(xiàn)WebSocket發(fā)送接收消息 + Vue實(shí)現(xiàn)SocketJs接收發(fā)送消息

    1、https://www.mchweb.net/index.php/dev/887.html 2、https://itonline.blog.csdn.net/article/details/81221103?spm=1001.2101.3001.6661.1utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~default-1-81221103-blog-121078449.pc_relevant_aadepth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~default-1-81221103-blog-12107

    2024年02月05日
    瀏覽(19)
  • Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布)

    Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布)

    目錄 前言 父子組件 父?jìng)髯?子傳父 全局事件總線 什么叫全局事件總線 如何創(chuàng)建全局事件總線 如何在組件上獲取到這個(gè)全局vc對(duì)象 最常用的創(chuàng)建全局事件總線 兄弟組件 消息訂閱與發(fā)布 安裝 使用 爺孫組件 在上篇文章我們介紹了父子組件之間的傳值通信,本文將介紹不僅限

    2024年02月05日
    瀏覽(53)
  • vue+springboot+websocket實(shí)現(xiàn)消息通知,含應(yīng)用場(chǎng)景

    vue+springboot+websocket實(shí)現(xiàn)消息通知,含應(yīng)用場(chǎng)景

    vue、springboot 實(shí)現(xiàn)場(chǎng)景 點(diǎn)擊同步之后更新數(shù)據(jù),更新時(shí)間比較長(zhǎng),因此使用異步,之后該按鈕置灰,在數(shù)據(jù)更新完成之后,服務(wù)端通知客戶端已經(jīng)同步成功,通知提示框,用戶即可查看數(shù)據(jù) 前端 1、在對(duì)應(yīng)的頁(yè)面編寫(xiě)初始化、連接成功,錯(cuò)誤,接受信息方法 2、mounted或者cre

    2024年02月11日
    瀏覽(41)
  • vue設(shè)置全局樣式:loadOptions

    vue中全局設(shè)置樣式有兩種方法 : ** 1. 第一種:只需要在main.js中引入 ** 如global.css html,body,#app{ height: 100%; margin: 0px; padding: 0px; } 在main.js中引入 import “./styles/index.scss”; import ‘./assets/css/global.css’ import ‘./assets/fonts/iconfont.css’ 這樣所有的vue組件都有了這個(gè)公共樣式。 2. 第二

    2023年04月08日
    瀏覽(9)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包