1、webSocket的生命周期一共有4个状态:connecting、open、closing、closed
注意:只有长连处在 open 状态,才能够正常的收发消息,其他状态均会报错。
2、小程序长连的断开机制
当小游戏进入到后台运行超过5秒时,客户端会禁止小游戏的所有网络连接。这是一个非常频繁的断线逻辑,十分考验程序断线错误处理逻辑。建议大家可以在用户点击右上角按钮退出小程序/小游戏时,主动帮用户断线,待用户切回时再重接上去。
当 webSocket 长连超过一段时间没有任何网络传输时,客户端会主动关闭这条长连,以节省资源。开发者可以设置业务心跳,每隔一段时间与后台进行一次通讯,维持长连。
3、心跳和重连机制
定时sendMsg,如果发送失败,可以根据socketTask.readyState和close.code 状态码选择性进行重连。
/**
* socketReadyState
* 0:CONNECTING
* 1:OPEN
* 2:CLOSING
* 3:CLOSED
*/
/**
*onClose
*/
//小程序主动关闭
if (code == 1000 && reason == "normal closure") {
}
// 小程序切换到后台,被微信杀掉,需要重连连接
if (code == 1000 && reason == "interrupted") {
}
// 服务端拒绝连接
if (code == 1001 && reason == "Stream end encountered") {
}
// 服务关闭
if (code == 1006 && reason == "abnormal closure") {
}