基于uniapp的全局监听websocket连接及接收服务端消息
定义一个全局的socket类,放在util目录下
//定义一个socket类 class WebSocket { constructor(url) { this.url = url this.time=null; } //建立连接 connet() { let _this = this; uni.connectSocket({ url: _this.url, complete: (res) => { console.log(res) if (res.errMsg == 'connectSocket:ok') { //连接成功 _this.IsConnect(); } else { //连接失败 uni.showToast({ icon: 'none', title: '连接失败' }) } } }); } //判断是否连接 IsConnect() { let that = this; uni.onSocketOpen(function(res) { if (res) { //说明已经连接成功了 that.SetInterval(2, '心跳检测'); that.setConnect(); } }); } //与后台信息建立连接 setConnect() { let that = this; uni.onSocketMessage(function(res) { let data = res.data; console.log("WebSocket 收到消息:" + data); try { JSON.parse(data); data = JSON.parse(data) ? JSON.parse(data) : data; } catch { console.log('ws接收到非对象数据', data); return true; } var type = data.type || ''; switch(type){ case 'get_client_id': that.bindUid(data.data.client_id); break; case "call_mobile": var mobile = data.mobile; that.callphone(mobile) break; } }); } //心跳检测 SetInterval(delay, msg) { clearInterval(this.time) //先清除计时器 this.time = setInterval(function() { console.log('心跳检测') uni.sendSocketMessage({ data: msg }); }, delay*5000) } //打电话 callphone(mobile) { // #ifdef APP-PLUS plus.device.dial(mobile, false) // #endif } //判断是否断开连接 onError() { let that=this; uni.onSocketError(function(res) { console.log('连接断开') that.connet() }); } //绑定客户端 bindUid(client_id) { console.log('WebSocket 绑定客户端id' + client_id); let organise_id = uni.getStorageSync('organise_id'); let admin_id = uni.getStorageSync('admin_id'); bindSocketClient({client_id: client_id,organise_id:organise_id,admin_id:admin_id}).then(res=>{ console.log('~~~') console.log(res) }) } } export default { socket: WebSocket } import { bindSocketClient } from '@/api/login.js' socket
mian.js代码
import socket from '@/utils.js/socket'; let IO = new socket.socket('websocket连接地址'); Vue.prototype.$IO=IO;
页面内调用方法
onLoad() { this.$IO.connet() },
在app.vue中监听是否断开,断开就重连
onShow: function() { this.$IO.onError(); },
分类:
WebSocket/WorkerMan
, UniApp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!