uniapp websocket心跳重连
<script>export default {data() {return {timeout: 30000, // 30stimeoutObj: null};},onLoad() {// .判断是否已连接this.checkOpenSocket();},methods: {// 判断是否已连接checkOpenSocket() {uni.sendSocketMessage({data
·
<script>
export default {
data() {
return {
timeout: 30000, // 30s
timeoutObj: null
};
},
onLoad() {
// .判断是否已连接
this.checkOpenSocket();
},
methods: {
// 判断是否已连接
checkOpenSocket() {
uni.sendSocketMessage({
data: 'ping',
success: res => {
return;
},
fail: err => {
// 未连接打开websocket连接
this.openConnection();
}
});
},
openConnection() {
// 打开连接
// uni.closeSocket(); // 确保已经关闭后再重新打开
uni.connectSocket({
url: 'ws:........',
success(res) {
console.log('连接成功 connectSocket=', res);
},
fail(err) {
console.log('连接失败 connectSocket=', err);
}
});
uni.onSocketOpen(res => {
console.log('连接成功');
});
this.onSocketMessage(); // 打开成功监听服务器返回的消息
},
// 打开成功监听服务器返回的消息
onSocketMessage() {
// 消息
this.timeout = 30000;
this.timeoutObj = null;
uni.onSocketMessage(res => {
console.log(res)
this.getSocketMsg(res.data); // 监听到有新服务器消息
});
},
// 监听到有新服务器消息
getSocketMsg(reData) {
// 监听到服务器消息
console.log('收到服务器消息', reData);
this.reset(); // 检测心跳reset,防止长时间连接导致连接关闭
},
// 检测心跳reset
reset() {
clearInterval(this.timeoutObj);
this.start(); // 启动心跳
},
// 启动心跳 start
start() {
this.timeoutObj = setInterval(function() {
uni.sendSocketMessage({
data: 'ping',
success: res => {
console.log('连接中....');
},
fail: err => {
console.log('连接失败重新连接....');
this.openConnection();
}
});
}, this.timeout);
}
}
};
</script>
更多推荐
已为社区贡献2条内容
所有评论(0)