大佬們能分享個(gè)穩(wěn)定的Uniapp斷網(wǎng)重連的代碼嗎?
這是我之前寫(xiě)的聊天寫(xiě)過(guò)的。
其實(shí)很簡(jiǎn)單,監(jiān)聽(tīng)一下事件就行。
其實(shí)麻煩的還是onMessage的業(yè)務(wù)監(jiān)聽(tīng)
import tools from "@/assets/js/tools.js";
import store from '@/util/store';
let socketResource = null;
let socketTimer = null;
let sound = null;
const socket = {
currentChat: null,
init(options) {
if (socketResource != null) {
return true;
}
console.log(options)
if (typeof options == 'undefined') {
options = {};
}
if (options.onSuccess == undefined) {
options.onSuccess = function() {}
}
console.log(options)
console.log('長(zhǎng)鏈接初始化')
socketResource = uni.connectSocket({
url: tools.wssHost, //僅為示例,并非真實(shí)接口地址。
success: (res) => {
socketTimer = setInterval(() => {
this.send({
type: "ping",
});
}, 10000);
console.log('調(diào)用onSuccess回調(diào)')
setTimeout(() => {
options.onSuccess()
}, 300)
},
fail(e) {
console.log('建立連接失敗', e);
setTimeout(() => {
socket.restartInit()
}, 1200)
}
});
socketResource.onMessage((revice) => {
})
socketResource.onError((e) => {
console.log('長(zhǎng)鏈接錯(cuò)誤:', e)
socketResource.close()
socket.restartInit()
})
socketResource.onClose(() => {
socket.restartInit()
})
},
restartInit() {
socketResource = null;
clearInterval(socketTimer)
socketTimer = null;
setTimeout(() => {
console.log('關(guān)閉長(zhǎng)鏈接并重新初始化')
socket.init({
onSuccess: () => {
console.log('執(zhí)行重啟回調(diào)')
socket.login()
}
});
}, 300)
},
login() {
this.send({
type: "login",
});
},
send(item) {
},
}
export default socket;