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()

相关推荐
zbtlink28 分钟前
户外路由器和家用路由器:差异解析与混用考量
网络·智能路由器
じ☆冷颜〃6 小时前
黎曼几何驱动的算法与系统设计:理论、实践与跨领域应用
笔记·python·深度学习·网络协议·算法·机器学习
懒人村杂货铺6 小时前
✅ WebSocket 接口从本地开发到生产部署的关键步骤与常见问题
websocket
风送雨6 小时前
FastMCP 2.0 服务端开发教学文档(下)
服务器·前端·网络·人工智能·python·ai
芯盾时代7 小时前
石油化工行业网络风险解决方案
网络·人工智能·信息安全
线束线缆组件品替网7 小时前
Weidmüller 工业以太网线缆技术与兼容策略解析
网络·人工智能·电脑·硬件工程·材料工程
以太浮标8 小时前
华为eNSP模拟器综合实验之-BFD联动配置解析
运维·网络·华为·信息与通信
liwulin05069 小时前
【JAVA】创建一个不需要依赖的websocket服务器接收音频文件
java·服务器·websocket
ICT系统集成阿祥9 小时前
OSPF邻居建立失败完整排查指南
网络·网络协议
liulilittle10 小时前
OPENPPP2 Code Analysis One
网络·c++·网络协议·信息与通信·通信