微信小程序使用websocket
连接websocket
let url = `******`//websocket地址
wx.connectSocket({
url: url,
success() {
console.log('连接成功')
that.initEventHandle() //websocket绑定的各种事件
}
})
websocket绑定的各种事件
// websocket绑定的各种事件
initEventHandle() {
wx.connectSocket(function (res) { //监听 WebSocket 连接打开事件
console.log('连接打开')
})
wx.onSocketMessage(function (res) { //监听 WebSocket 接受到服务器的消息事件
//收到消息
console.log(res)
that.reset().start();
if (res.data == "heartOk") {
} else {
//你自己的数据处理
}
})
wx.onSocketError(function (res) { //监听 WebSocket 错误事件
console.log('WebSocket连接打开失败,请检查!');
console.log(res.code)
wx.showToast({
title: '数据更新失败',
duration: 2000
})
that.reconnect()
})
wx.onSocketClose(function (res) {
console.log(res)
console.log('WebSocket 已关闭!' + res.code)
})
},
断线重连
// 断线重连
reconnect() {
if (this.lockReconnect) return;
this.lockReconnect = true;
clearTimeout(this.timer)
if (this.data.limit < 12) {
this.timer = setTimeout(() => {
this.linkSocket();
this.lockReconnect = false;
}, 5000);
this.setData({
limit: this.data.limit + 1
})
}
},
计时发送心跳
reset() {
clearTimeout(this.data.timeoutObj);
return this;
},
start() {
this.data.timeoutObj = setTimeout(() => {
console.log("发送heart");
wx.sendSocketMessage({
data: "heart",
success() {
console.log("发送heart成功");
}
});
}, this.data.timeout);
},
页面销毁同时关闭websocket
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
wx.closeSocket();
},