android小程序 socket,小程序全局socket使用 并自定义发送心跳

//app.js

App({

globalData: {

userInfo: null

socketUrl:"wss:.....",//socketUrl

//延迟

timeout: 10000,

socketHeartTimer: null,

//socket连接回调函数

callback: function () {},

//socket连接定时器

socketClientTimer: null,

//当前socket是否连接

isSocketConnect: false

},

//建议在这做全局登录标识 是否已经登录决定是否onShow中是否调用连接

onLaunch: function () {

}

//生命周期onShow中调用socket连接

onShow:function(){

//此处可以根据登录状态判断是否调用连接socket

// 连接socket

// 检查用户登录状态,并决定是否开启socket

this.checkLoginUserSocket();

//判断是否登录 连接socket

this.globalData.socketClientTimer = setInterval(() => {

// 定时器---检查用户登录状态,并决定是否开启socket

this.checkLoginUserSocket();

}, 30000)

},

// 检查用户登录状态,并决定是否开启socket

checkLoginUserSocket: function () {

if ("已经登录状态下根据情况判断") {

//登录状态下调用连接socket 且判断是否已经连接socket

if (!this.globalData.isSocketConnect) {

// console.log("-----用户一登录---连接socket")

this.connectSocketFunciton()

}

} else {

// console.log("-----用户未登录--关闭socket")

//未登录状态下清除定时器关闭socket

this.closeSocketFunction()

}

},

// 小程序进入后台

onHide: function () {

// 关闭全局socket状态连接定时器

clearInterval(this.globalData.socketClientTimer)

// 关闭socket

this.closeSocketFunction()

},

//小程序连接socket

connectSocketFunciton: function () {

var that = this

var socketUrl = this.globalData.socketUrl

wx.connectSocket({

url: socketUrl,

success: (res => {

// 标识socket已连接

that.globalData.isSocketConnect = true

// 初始化连接监听

that.initEventHandler()

}),

fail: (fail => {})

})

},

// 绑定监听

initEventHandler: function () {

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

console.log(res)

//第一次消息如果为init就绑定uid

var data = JSON.parse(res.data)

//这里data可以根据后端返回的数据做一些处理 根据自己的需求做出对应的处理

// 全局socket接收消息的方法回调

that.globalData.callback(res)

})

},

//发送心跳

startHeart: function () {

if (this.globalData.isSocketConnect) {

this.globalData.socketHeartTimer = setInterval(() => {

var msg = JSON.stringify({

'data': 'ping'

})

wx.sendSocketMessage({

data: msg,

success: function (res) {},

fail: function (res) {}

})

}, 10000)

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

}

})

//在外面调用的方式

onLoad:function(){

this.onSoekctCallback()

},

//根据需求对data做出自己的处理

onSoekctCallback: function () {

var that = this

app.globalData.callback = function (res) {

var data = JSON.parse(res.data)

}

},

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值