webSocketInit () {
const vm = this
let token = ''
let socketUrl = 'wss://websocket.test'
// 建立 WebSocket 连接
vm.socket = wx.connectSocket({
url: socketUrl,
header: {
'content-type': 'application/json',
'authorization': 'Bearer' + token,
'x-wxapp-sockettype': 'ordertips'
},
success (res) {
console.log('WebSocket 连接成功: ', res)
},
fail (err) {
console.log('WebSocket 连接失败: ', err)
}
})
// onOpen
vm.socket.onOpen((ret) => {
console.log('打开 WebSocket 连接')
})
// onMessage
vm.socket.onMessage((ret) => {
if (ret.data == 'pong') {
return;
}
let data = JSON.parse(ret.data)
wx.showToast({
title: data.message,
icon: 'none',
duration: 3000
})
})
// onError
vm.socket.onError((err) => {
console.log('WebSocket 连接失败:', err)
})
// onClose
vm.socket.onClose((ret) => {
console.log('断开 WebSocket 连接', ret)
})
},
// send message
send (msg) {
const vm = this
vm.socket.send({
data: msg,
success (res) {
console.log('WebSocket 消息发送成功', res)
},
fail (err) {
console.log('WebSocket 消息发送失败', err)
}
})
},
// 心跳,由客户端发起
ping () {
const vm = this
let times = 0
// 每 10 秒钟由客户端发送一次心跳
this.interval = setInterval(function () {
if (vm.socket.readyState == 1) {
vm.send('ping')
} else if (vm.socket.readyState == 3) {
times += 1
// 超时重连,最多尝试 10 次
if (times >= 10) {
wx.showToast({
title: 'WebSocket 连接已断开~',
icon: 'none',
duration: 3000
})
clearInterval(vm.interval)
}
vm.reconnect()
}
}, 10000)
},
// WebSocket 断线重连
reconnect () {
const vm = this
vm.webSocketInit()
},
26