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

uniapp websocket 封裝斷線重連

這篇具有很好參考價(jià)值的文章主要介紹了uniapp websocket 封裝斷線重連。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?1.新建一個(gè)工具類js文件

uniapp websocket 重連,uni-app,websocket,html5

2. 把我封裝的代碼復(fù)制進(jìn)去

//引入vuex,因?yàn)槲倚枰褂胿uex存儲得到的數(shù)據(jù)
import store from "@/store/index.js"
// 連接
let socketTask = null
// 是否主動關(guān)閉連接
let meClose = false
// 地址 寫你的后端連接地址
let url = "ws://192.168.1.2:8888/ws/"
let token = null
// 重連定時(shí)器
let Time = null
// 心跳定時(shí)器
let XTime = null
// 開啟連接
const sokcet = () => {
    // 我這個(gè)項(xiàng)目需要在連接的時(shí)候帶token,不需要可以只寫url地址
	token = uni.getStorageSync("token") //token
	// console.log(url + token);
	//判斷是否有websocet對象,有的話清空
	if (socketTask) {
		uni.closeSocket()
		socketTask = null;
	}
	// 進(jìn)行連接
	socketTask = uni.connectSocket({
		url: url + token, //僅為示例,并非真實(shí)接口地址。不需要帶token可以只寫url地址
		success(data) {
			clearInterval(Time) //關(guān)閉定時(shí)器
			clearInterval(XTime) //關(guān)閉心跳定時(shí)器
			console.log("創(chuàng)建連接!");
			// 監(jiān)聽是否連接
			uni.onSocketOpen((res) => {
				console.log('連接成功!獲取離線信息');
				sendMsg("1000")
				clearInterval(Time) //關(guān)閉定時(shí)器
				clearInterval(XTime) //關(guān)閉心跳定時(shí)器
				// 5秒發(fā)送一次心跳//后端檢測是否在線
				XTime = setInterval(() => {
					// console.log("心跳");
					sendMsg("2000")
				}, 5000)
			});
		}
	});

	// 監(jiān)聽連接失敗
	uni.onSocketError((err) => {
		console.log('連接失敗,請檢查');
		if (!meClose) {//判斷是否主動關(guān)閉進(jìn)行重新連接
			reconnect()
		}
	})
	// 監(jiān)聽連接關(guān)閉close
	uni.onSocketClose((e) => {
		console.log('連接關(guān)閉!', meClose);
		if (!meClose) {//判斷是否主動關(guān)閉進(jìn)行重新連接
			reconnect()
		}
	})
	// 監(jiān)聽收到信息
	uni.onSocketMessage((res) => {
		let data = JSON.parse(res.data)
		// 接收數(shù)據(jù)后回調(diào)
		console.log('服務(wù)器內(nèi)容:', data);
        // 我存儲數(shù)據(jù)到vuex
		// 全部消息列表
		// store.commit("login/pushList", data)
		// 提醒消息列表 
		// store.commit("login/unshiftMessage", data)
		// 存儲到本地
		// store.commit("login/setvuex")
		// uni.onPushMessage((res) => {
		// 	// 后臺提醒內(nèi)容 需要后端配置,也可以不要
		//if (uni.getStorageSync("uuid") != data.senderId) {
			//let name = data.names ? data.names : "新消息"
			//let text = data.payload.text ? data.payload.text : "你有一條新消息待查看"
			// console.log(name);
			// console.log(text);
			//uni.createPushMessage({
			//	title: name,
			//	content: text,
			//	sound: "system",
			//	icon: "/static/images/logobc.png",
			//	 payload:{
			//	這里地方你可以隨意組合你想要的數(shù)據(jù),uni.onPushMessage會監(jiān)聽到你組合的數(shù)據(jù)。
			//	 },
		//		success: (res => {
		//			 console.log('成功創(chuàng)建')
		//		}),
		//	})
		//}
		// console.log("收到推送消息:", JSON.parse(res.data)) //監(jiān)聽推送消息
		// })

	});
}
// 重新連接
const reconnect = () => {
	console.log("開始斷線重連?。。。。。。。。。?!");
	// 確保已經(jīng)關(guān)閉后再重新打開
	uni.closeSocket()
	socketTask = '';
	console.log("重新連接中...");
	// console.log(url + token);
	sokcet(url + token)
}
//向后端發(fā)送信息
const sendMsg = (msg) => {
	msg = JSON.stringify(msg)
	// console.log(msg);
	//通過 WebSocket 連接發(fā)送數(shù)據(jù)
	uni.sendSocketMessage({
		data: msg,
		success() {
			// console.log("成功");
		},
		fail() {
			console.log("失敗");
			uni.showLoading({
				title: "加載中..."
			})
			setTimeout(() => {
				uni.hideLoading()
			}, 1000)
			if (!meClose) {
				reconnect()
			}
		},
	});
}
// 手動關(guān)閉連接
const stop = () => {
	// 主動關(guān)閉連接
	meClose = true
	uni.closeSocket({
		success() {
			console.log("手動關(guān)閉成功!");
			clearInterval(Time) //關(guān)閉定時(shí)器
			clearInterval(XTime) //關(guān)閉心跳定時(shí)器
			// 確保已經(jīng)關(guān)閉
			socketTask = null;
		}
	})
}
// 導(dǎo)出方法
export const websocetObj = {
	sokcet, //連接
	stop, //關(guān)閉
	sendMsg //發(fā)送
};

我是用uniapp 的api封裝的 在外面也可以直接用uniapp的api操作

只有在開始調(diào)用連接需要用封裝的方法調(diào)用

在需要使用封裝的方法的頁面?引入js

?? ?import {
?? ??? ?websocetObj
?? ?} from "@/API/websocket.js"

?完善重連

在app.vue的onShow生命周期發(fā)送心跳檢測是否連接(寫在這個(gè)生命周期可以提高連接速度)

// 發(fā)送一次心跳,沒有成功就觸發(fā)重新連接
??websocetObj.sendMsg("2000")

調(diào)用連接方法

//請求連接
?websocetObj.sokcet()

關(guān)閉連接

?// 關(guān)閉連接
??websocetObj.stop()

?發(fā)送消息

sendTextMessage() { //發(fā)送消息
?? ??? ??? ??? ?if (this.content.trim() != '') {
?? ??? ??? ??? ??? ?let date = new Date()
?? ??? ??? ??? ??? ?let jsondata = {
?? ??? ??? ??? ??? ??? ?groups: 0,
?? ??? ??? ??? ??? ??? ?payload: {
?? ??? ??? ??? ??? ??? ??? ?text: this.content,
?? ??? ??? ??? ??? ??? ??? ?tpUrl: "",
?? ??? ??? ??? ??? ??? ??? ?spUrl: ""
?? ??? ??? ??? ??? ??? ?},
?? ??? ??? ??? ??? ??? ?receiverId: this.frienduuid,
?? ??? ??? ??? ??? ??? ?senderId: this.user.uuid,
?? ??? ??? ??? ??? ??? ?names: this.user.names,
?? ??? ??? ??? ??? ??? ?avatar: this.user.avatar,
?? ??? ??? ??? ??? ??? ?status: "success",
?? ??? ??? ??? ??? ??? ?timestamp: date.getTime(),
?? ??? ??? ??? ??? ??? ?type: "text"
?? ??? ??? ??? ??? ?};

? ? ? ? ? ? ? ? ? ? ?// 使用封裝方法發(fā)送
?? ??? ??? ??? ??? ?// websocetObj.sendMsg(jsondata)

? ? ? ? ? ? ? ? ? ? // 使用uniapp 原生方法發(fā)送(我使用原生方法是因?yàn)橄爰右粋€(gè)消息發(fā)送失敗提醒)
?? ??? ??? ??? ??? ?let msg = JSON.stringify(jsondata);
?? ??? ??? ??? ??? ?uni.sendSocketMessage({
?? ??? ??? ??? ??? ??? ?data: msg,
?? ??? ??? ??? ??? ??? ?success: () => {
?? ??? ??? ??? ??? ??? ??? ?//發(fā)送成功的方法
?? ??? ??? ??? ??? ??? ??? ?console.log("給" + this.title + "消息發(fā)送成功");
?? ??? ??? ??? ??? ??? ?},
?? ??? ??? ??? ??? ??? ?fail() {
?? ??? ??? ??? ??? ??? ??? ?uni.showToast({
?? ??? ??? ??? ??? ??? ??? ??? ?title: '消息發(fā)送失敗,請檢查網(wǎng)絡(luò)',
?? ??? ??? ??? ??? ??? ??? ??? ?icon: 'none'
?? ??? ??? ??? ??? ??? ??? ?});
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?});
?? ??? ??? ??? ??? ?// 調(diào)用滾動到最下面的方法
?? ??? ??? ??? ??? ?this.scrollToBottom();
?? ??? ??? ??? ??? ?// 清空輸入框
?? ??? ??? ??? ??? ?this.content = "";
?? ??? ??? ??? ?}
?? ??? ??? ?},

?這個(gè)就是斷線重連的過程 自動檢測到服務(wù)器斷線然后自動重新連接,中間報(bào)錯(cuò)是正常的沒有連接到的報(bào)錯(cuò),直到連接成功獲取離線消息表示連接好了

uniapp websocket 重連,uni-app,websocket,html5

?封裝思想:

通過uniapp提供的API方法進(jìn)行封裝

斷線重連機(jī)制:

通過發(fā)送心跳檢測是否能夠發(fā)送成功判斷是否連接

?有不理解的地方歡迎私信或者評論問?。?/strong>文章來源地址http://www.zghlxwxcb.cn/news/detail-670987.html

到了這里,關(guān)于uniapp websocket 封裝斷線重連的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • websocket斷線重連&&心跳檢測

    websocket斷線重連&&心跳檢測

    封裝websocket 實(shí)現(xiàn)斷線重連跟心態(tài)檢測,使用的typeScript去封裝 在nodejs 安裝ws庫 代碼如下(示例): ?服務(wù)端實(shí)現(xiàn)ws 創(chuàng)建一個(gè)server.js 文件 運(yùn)行ws服務(wù) ? node .server.js? 客戶端實(shí)現(xiàn)websocket 創(chuàng)建一個(gè)socket.ts 文件 vue 頁面使用 斷開ws服務(wù) 斷線? 啟動服務(wù)后 自動重連

    2024年01月19日
    瀏覽(26)
  • WebSocket的心跳機(jī)制和斷線重連

    在服務(wù)器重啟或是弱網(wǎng)情況下,前端不能保證一直連接成功。因此在出現(xiàn)被動斷開的情況下,需要有 心跳機(jī)制 和 斷線重連 的功能。 心跳機(jī)制 :客戶端每隔一段時(shí)間向服務(wù)端發(fā)送一個(gè)特有的心跳消息,每次服務(wù)端收到消息后只需將消息返回,此時(shí),若二者還保持連接,則客

    2024年01月18日
    瀏覽(22)
  • websocket的基礎(chǔ)使用,心跳機(jī)制,斷線重連

    websocket的基礎(chǔ)使用,心跳機(jī)制,斷線重連

    websoket出現(xiàn)的原因: 傳統(tǒng)的http請求只能是由前端向后臺發(fā)送一個(gè)請求,然后后臺把結(jié)果返回給前端,前端再進(jìn)行展示。這里就暴露了一個(gè)問題,就是通信只能由前端發(fā)起,而后臺無法主動與前端通信。而websoket的出現(xiàn)就是為了解決這個(gè)問題,讓前端可以主動聯(lián)系后臺,后臺也

    2024年02月06日
    瀏覽(26)
  • Java連接websocket優(yōu)雅斷線、重連功能

    Java連接websocket優(yōu)雅斷線、重連功能

    ? ? ? 為了實(shí)現(xiàn)優(yōu)雅重連和重試,您需要在代碼中添加一些邏輯來處理連接失敗或斷開連接的情況。 實(shí)現(xiàn)代碼如下:

    2024年02月10日
    瀏覽(19)
  • java實(shí)現(xiàn)WebSocket客戶端&&斷線重連機(jī)制

    1、引入maven依賴(注意版本) 2、代碼

    2024年02月16日
    瀏覽(25)
  • Android中okhttp的websocket的詳細(xì)使用方法(加斷線重連)

    介紹之類的就不多講了,懶得講也未必有別人整理的清晰,直接上代碼 使用:

    2024年02月15日
    瀏覽(26)
  • uni-app使用websocket

    原文鏈接:https://blog.csdn.net/weixin_43343144/article/details/92998467

    2024年02月07日
    瀏覽(18)
  • websocket和uni-app里使用websocket

    websocket和uni-app里使用websocket

    特點(diǎn): 1、瀏覽器發(fā)送請求時(shí),瀏覽器和服務(wù)器會建立一個(gè)連接。完成請求和響應(yīng)。在http1.0之前,每次請求響應(yīng)完畢后,會立即斷開連接。在http1.1之后,當(dāng)前網(wǎng)頁的所有請求響應(yīng)完畢后,才斷開連接。 2、這樣就意味著,服務(wù)器并不清楚,某次連接和以前的哪個(gè)連接來自于同

    2024年02月11日
    瀏覽(22)
  • uni-app封裝的request請求

    uni-app封裝的request請求

    config.js ? ?main.js 頁面使用:

    2024年02月12日
    瀏覽(29)
  • uni-app組件封裝基本知識

    uni-app組件封裝基本知識

    ????????小寫字母,單詞用“ - ”鏈接例如(bj-item ) , 目錄名稱和文件名保持一致,官方默認(rèn)把“ uni- ”開頭的 組件全局掛載,不是這種格式的組件需要局部掛載。 1 、“ uni- ”開頭的組件官方默認(rèn)全局掛載 ?2、組件使用 隨著Hbuilder的升級,現(xiàn)在組件統(tǒng)一放到uni_module

    2023年04月08日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包