全局数据data
data(){
return{
connectWebsocket:1,//连接服务器对象
socketTask:null,//[发送、接收、关闭socket都由这个对象操作]
is_open_socket:false,//true:服务器连接成功,false连接不成功
setInterData:null,//心跳
}
},
连接服务器
onLoad() {
that.connectSocketInit(); //连接服务器
}
connectSocketInit具体写法
连接socket服务器次数加一
const that = this;
that.connectWebsocket = that.connectWebsocket + 1;
判断连接次数
- 判断连接次数是否大于10次,是10次就调用that.closeSocket() 函数关闭连接服务器的操作
const that = this;
if (that.connectWebsocket >= 10) {
that.closeSocket();
}
closeSocket()断开socket连接
- 将连接服务器赋值为null
- 将心跳断开
// 关闭websocket【离开这个页面的时候执行关闭】
closeSocket(val) {
const that = this;
that.manualShutdown = true;
that.socketTask.close({
success(res) {
that.is_open_socket = false;
console.log("关闭成功", that.setInterData)
clearInterval(that.setInterData)
that.setInterData = null;
},
fail(err) {
clearInterval(that.setInterData)
console.log("关闭失败4", err)
}
})
},
socketTask是否为空
socketTask不为空也关闭socket连接,且将socketTask赋值为null
const that = this;
if (that.socketTask != null) {
that.closeSocketAgain()
that.socketTask = null;
}
连接socketT服务器代码
that.socketTask = uni.connectSocket({
url: "服务器地址",
success(data) {},
fail(data) {}
});
that.socketTask.onOpen()
// 消息的发送和接收必须在正常连接打开中,才能发送或接收【否则会失败】
that.socketTask.onOpen((res) => {
that.is_open_socket = true;
that.heartbeatFormat();
})
心跳格式
第一: 判断心跳是否为空,不为空结束心跳。
第二:启动心跳,每隔6分钟发送一次心跳给服务器
// 心跳格式
heartbeatFormat() {
const that = this;
//判断心跳是否为有,有就清除心跳,重新起一个心跳
if (that.setInterData != null) {
clearInterval(that.setInterData);
console.log('先清除掉');
}
//启动心跳,6分钟发送一次心跳给服务器
that.setInterData = setInterval(() => {
that.socketTask.send({
data: '{"msgType":"HEART_BEAT","content":"HEART_BEAT"}',
success(res) {
console.log("消息发送成功", res);
},
});
}, 60000)
},
that.socketTask.onMessage
实时接收服务器返回的信息 ,然后对接收到的信息进行处理
that.socketTask.onMessage((res) => {
console.log('收到服务器的返回消息', res);
})
that.socketTask.onClose ()
监听socket服务器的连接断开,查看是主动断开还是被动断开,
主动断开不管,被动断开需要进行从新连接
that.socketTask.onClose((e, res) => {
const that = this;
console.log("服务器断链接,挂掉了:", e, res);
});