记住用户名密码
App({ globalData: { supplierId: null, socketUrl: null, // socketUrl timeout: 10000, // 延迟 socketHeartTimer: null, callback: function () {}, // socket连接回调函数 socketClientTimer: null, // socket连接定时器 isSocketConnect: false, // 当前socket是否连接 }, onShow() { // 检查用户登录状态,并决定是否开启socket this.checkLoginUserSocket(); //判断是否登录 连接socket this.globalData.socketClientTimer = setInterval(() => { // 定时器---检查用户登录状态,并决定是否开启socket this.checkLoginUserSocket(); }, 30000) }, // 小程序进入后台 onHide() { // 关闭全局socket状态连接定时器 clearInterval(this.globalData.socketClientTimer) // 关闭socket this.closeSocketFunction() }, // 检查用户登录状态,并决定是否开启socket checkLoginUserSocket() { this.globalData.supplierId = wx.getStorageSync('supplierId') || null; if (this.globalData.supplierId) { //登录状态下调用连接socket 且判断是否已经连接socket if (!this.globalData.isSocketConnect) { // console.log("-----用户一登录---连接socket") this.connectSocketFunciton() } } else { // console.log("-----用户未登录--关闭socket") //未登录状态下清除定时器关闭socket this.closeSocketFunction() } }, //小程序连接socket connectSocketFunciton() { var that = this var socketUrl = `wss://127.0.0.33/wss/websocket/${that.globalData.supplierId}` wx.connectSocket({ url: socketUrl, success: (res => { // 标识socket已连接 that.globalData.isSocketConnect = true // 初始化连接监听 that.initEventHandler() }), fail: (fail => {}) }) }, // 绑定监听 initEventHandler() { var that = this // socket连接开启 wx.onSocketOpen((result) => { // 开启心跳 that.startHeart() }) // socket连接关闭 wx.onSocketClose((res) => { if (that.globalData.isSocketConnect) { that.connectSocketFunciton() } }) // 接收socket消息 wx.onSocketMessage((res) => { console.log("onSocketMessage", res) //第一次消息如果为init就绑定uid // var data = JSON.parse(res.data) //这里data可以根据后端返回的数据做一些处理 根据自己的需求做出对应的处理 // 全局socket接收消息的方法回调 that.globalData.callback(res) }) }, //发送心跳 startHeart() { if (this.globalData.isSocketConnect) { this.globalData.socketHeartTimer = setInterval(() => { wx.sendSocketMessage({ data: 'heartBath', success: function (res) {}, fail: function (res) {} }) }, 45 * 1000) } else { clearTimeout(this.globalData.socketHeartTimer) } }, //此页面关闭socket和定时器的函数 closeSocketFunction: function () { if (this.globalData.isSocketConnect) { // 标识socket已断开 this.globalData.isSocketConnect = false // 关闭socket连接 wx.closeSocket() // 关闭socket心跳定时器 clearInterval(this.globalData.socketHeartTimer) } }, })
然后再接收到消息时添加回调方法:
// 接收socket消息 wx.onSocketMessage((res) => { console.log("onSocketMessage", res) //第一次消息如果为init就绑定uid // var data = JSON.parse(res.data) //这里data可以根据后端返回的数据做一些处理 根据自己的需求做出对应的处理 // 全局socket接收消息的方法回调 that.globalData.callback(res) })
然后再需要进行通知处理的页面添加如下代码:
onShow() { this.onSoekctCallback(); }, // 收到消息处理 onSoekctCallback: function () { app.globalData.callback = (res) => { console.log("获取到消息了", res.data); if (res.data === 'success' || res.data === 'heartBath') return let { supplierId } = this.data; this.onRequireNoticeList(supplierId); } },
目前有 0 条留言 其中:访客:0 条, 博主:0 条