今天遇到一个扯淡的问题,当我小程序页面退出或者息屏后,隔一段时间后再次进入页面,发现ws无法再次受到
服务器推送的ws消息,
原因:当你小程序页面退出后(大约5秒),其实你的小程序已经处于休眠状态,说白了就是你小程序里的任何代码都不会执行,服务器会认为你APP处于断线状态,会直接closesocket
解决办法:这时你就需要用onshow和onhide,这两个函数是用来判断,onshow是来监视判断是否进入显示页面(注:和onlond不一样,onlond是加载整个整个页面,onshow是来监视是否显示页面),onhide是监视页面退出和隐藏
算了加上我的代码吧:
onShow:function(){
var that = this;
if(that.data.isscan)//判断是否已经创建了ws请求
{
if (that.data.ishide) {
that.setData({
ishide: false
})
wx.sendSocketMessage({//不管ws请求是否关闭,都会发送消息,如果发送失败说明没有ws请求
data: 'ws alive test',
success(data) {
console.log('ws is ok:')
},
fail(err) {
var openid = wx.getStorageSync('openid')
try {//不管是有没有ws请求,都会closesocket,不管是成功还是异常,都会重新创建ws请求
wx.closeSocket({
success(data) {
},
fail(err) {
},
complete(data) {
app.socketrequest(openid, that)
}
})
} catch (e) {
}
}
})
}
}
},
onHide:function()
{
var that = this;
if (that.data.isscan)
{
that.setData({
ishide: true
})
}
},