uni webSocket连接记录

socketTask.js

let timer = null; //心跳计时器

let debug = false; //debug输出log

let retimer = null; //重连计时器

let pingCount = 0; //心跳次数

let pingCountMax = 5; //最大心跳次数超过重连

let pingTimeout = 5000; //心跳间隔时间(毫秒)

let connectTimeout = 2000; //重连时间(毫秒)

let socketTask = null; //ws

// 连接WebSocket

export function connectSocket() {

debug && console.log(socketTask);

var token = uni.getStorageSync('Authorization');

if (!token || socketTask) {

console.log('开启socketTask失败')

return

}

socketTask = uni.connectSocket({

url: 'wss://im-api.q3z3.com/ws?Authorization=' + uni.getStorageSync('Authorization'),//WebSocket地址

// url: 'ws://192.168.0.200:8080/ws?Authorization=' + uni.getStorageSync('Authorization'),//WebSocket地址

complete: () => {}

});

socketTask.onOpen(res => {

console.log('WebSocket连接已打开!');

debug && console.log(socketTask);

// 发送心跳

socketTask.send({

data: 'isConnact',

success: res => {

if (res.errMsg == 'sendSocketMessage:ok') {

debug && console.log('WebSocket心跳ping');

}

}

})

// 定时心跳

timer = setInterval(() => {

// ping超过5次未响应则重连

pingCount++

debug && console.log('ping次数'+pingCount+'/'+pingCountMax);

if (pingCount >= pingCountMax) {

clearSocketTask()

reConnectSocket()

return

}

socketTask.send({

data: 'isConnact',

success: res => {

if (res.errMsg == 'sendSocketMessage:ok') {

debug && console.log('WebSocket心跳ping');

}

}

})

}, pingTimeout)

})

// 监听接收

socketTask.onMessage(res => {

if (socketTask && token) {

if(res.data=='ok'){

pingCount = 0;

return

}

var data = JSON.parse(res.data);

console.log('WebSocket接收消息!');

}

})

// 监听关闭

socketTask.onClose((res) => {

debug && console.log(socketTask);

console.log('WebSocket连接已关闭!');

if (!socketTask) {

console.log('无需操作')

return

}

if (socketTask.readyState !== 1) {

console.log('需要重新连接')

clearSocketTask()

reConnectSocket()

}

})

// 监听异常

socketTask.onError(res => {

debug && console.log(socketTask);

console.log('WebSocket连接异常!');

if (!socketTask) {

console.log('无需操作')

return

}

if (socketTask.readyState !== 1) {

console.log('需要重新连接')

clearSocketTask()

reConnectSocket()

}

});

}

// 清理WebSocket

export function clearSocketTask() {

clearInterval(timer)

clearTimeout(retimer)

pingCount = 0;

if (socketTask) {

socketTask.close()

socketTask = null

console.log('主动关闭WebSocket!');

}

}

// 重新连接WebSocket

export function reConnectSocket() {

retimer = setTimeout(() => {

connectSocket()

}, connectTimeout)

}

main.js 全局引入

import * as socketTask from "@/common/socketTask.js";

Vue.prototype.$socketTask = socketTask;

使用 onLaunch

this.$socketTask.connectSocket()

401登录过期时候

import {clearSocketTask} from "@/common/socketTask.js";

使用

clearSocketTask()

相关推荐
EasyDSS39 分钟前
国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法
网络协议·php·音视频·p2p
网安墨雨1 小时前
常用网络协议
网络·网络协议
Tlzns1 小时前
Linux网络——UDP的运用
linux·网络·udp
黑客老陈1 小时前
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
运维·服务器·前端·网络·安全·web3·xss
HSunR3 小时前
计算机网络
网络·计算机网络
ZoeLandia3 小时前
WebSocket | 背景 概念 原理 使用 优缺点及适用场景
网络·websocket·网络协议
南七澄江3 小时前
各种网站(学习资源及其他)
开发语言·网络·python·深度学习·学习·机器学习·ai
Crossoads7 小时前
【汇编语言】端口 —— 「从端口到时间:一文了解CMOS RAM与汇编指令的交汇」
android·java·汇编·深度学习·网络协议·机器学习·汇编语言
诸葛悠闲7 小时前
SOME/IP 协议详解——信息格式
网络协议
gywl10 小时前
openEuler VM虚拟机操作(期末考试)
linux·服务器·网络·windows·http·centos