«

webSocket 移动端锁屏以及退到后台重连机制

时间:2024-2-21 13:26     作者:韩俊     分类: PHP


手机锁屏以及退出后台webscoket会断开,js在手机熄屏后会中断,在唤醒之后js会继续执行。所以设置在js中的定时发送心跳包的功能在手机熄屏后就没法执行了。熄屏时间过长,这个时候链接就会被服务端强制断开,并且大部分手机在熄屏时,websocket连接就已经断开了。

解决办法: 使用H5提供的页面隐藏/显示API。

document.addEventListener('visibilitychange', function () {
    if (document.visibilityState == 'hidden') {
        //记录页面隐藏时间
        let hiddenTime = new Date().getTime()
    } else {
        let visibleTime = new Date().getTime();
        //页面再次可见的时间-隐藏时间>10S,重连    
        if ((visibleTime - hiddenTime) / 1000 > 10) {
            // 主动关闭连接
            WebSockets.webSocketClose();
            // 1.5S后重连 因为断开需要时间,防止连接早已关闭了
            setTimeout(function () {
                WebSockets.openSocket()
            }, 1500);
        } else {
            console.log('还没有到断开的时间')
        }
    }
}

标签: php教程

热门推荐