微信小程序全局websocket,避免在单页面中创建,重复处理逻辑,本文兼容了断开重连
首先创建配置文件
在根目录的 utils(如果没有那就创建一个) 创建 setting.js 文件 ,文件内容如下
/utils/setting.js
module.exports = { ws: '', // ws 连接地址 wsDisconnectTime: 3000, //每次断开连接时间 wsLikeTime: 3000, // ws 心脏包发送的时间 毫秒 }
接下来就是 webSocket主逻辑文件
在根目录的 utils(如果没有那就创建一个) 创建 webSocket.js 文件 ,文件内容如下
/utils/webSocket.js
var setting = require('setting.js'); module.exports = { ws: {}, // 实例 wsHeartTime: {}, //心脏的时间 is_log: 0, //记录登录次数 eventMap: {}, // 事件字典 on(event,fn){ this.eventMap[event] = fn; }, emit(event,data){ this.eventMap[event](data) }, /** * 连接 * @param {boolean} count 连接次数 * @param {boolean} type 登录类型 user=用户,admin=admin * @author: wmq * @Time: 2022/8/18 13:54 */ init() { let that = this; let ws = wx.connectSocket({ url: setting.ws, success:e => { } }) ws.onOpen(data => { that.emit('onOpen',{}) //先发送一次心脏 ws.send({ data: '{"controller":"worker","method":"heartbeat","data":""}' }); console.log('连接成功'); that.wsHeart() }) ws.onError((error) => { console.log(error) that.wsHeart(false); setTimeout(() => { that.init(); }, setting.wsDisconnectTime) }) ws.onClose((error) => { that.wsHeart(false); setTimeout(() => { that.init(); }, setting.wsDisconnectTime) }) ws.onMessage(data => { data = JSON.parse(data.data); console.log(data); }) that.ws = ws; }, /** * 心跳检测 * @param boolean status 登录类型 ture开启心跳 false 关闭心跳 * @author: wmq * @Time: 2022/8/18 13:54 */ wsHeart(status = true) { let that = this; if (status) { that.wsHeartTime = setInterval(function () { that.ws.send({ data: '{"controller":"worker","method":"heartbeat","data":""}' }); }, setting.wsLikeTime) } else { clearInterval(that.wsHeartTime); } }, }
接下来配置就是使用方法了
在app.js 中创建实例,并禁用断开事件,断开后重新赋值给全局变量
/app.js
// app.js var ws = require('./utils/webSocket'); App({ onLaunch() { ws.init() //初始化 ws //监听断开时间,网咯断开,ws 断开都会执行这个回调 ws.on('onOpen', () => { this.globalData.ws = ws.ws }) }, globalData: { ws: {}, // ws 实例 } })
在页面种使用
//在页面最上面先
const app = getApp()
//在方法中
let ws = app.globalData.ws; //接受信息 ws.onMessage(data => { data = JSON.parse(data.data); }) //发送信息 ws.send()
原文地址:http://www.cnblogs.com/quan846951943/p/16801967.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性