86 lines
2.0 KiB
JavaScript
86 lines
2.0 KiB
JavaScript
class websocketUtil {
|
|
constructor(url, time) {
|
|
console.log("url: ", url)
|
|
this.is_open_socket = false //避免重复连接
|
|
this.url = url //地址
|
|
this.data = null
|
|
//心跳检测
|
|
this.timeout= time //多少秒执行检测
|
|
this.heartbeatInterval= null //检测服务器端是否还活着
|
|
this.reconnectTimeOut= null //重连之后多久再次重连
|
|
|
|
try {
|
|
return this.connectSocketInit()
|
|
} catch (e) {
|
|
console.log('catch');
|
|
this.is_open_socket = false
|
|
this.reconnect();
|
|
}
|
|
}
|
|
|
|
// 进入这个页面的时候创建websocket连接【整个页面随时使用】
|
|
connectSocketInit() {
|
|
this.socketTask = uni.connectSocket({
|
|
url: this.url,
|
|
success:()=>{
|
|
console.log("正准备建立websocket中...");
|
|
// 返回实例
|
|
return this.socketTask
|
|
},
|
|
});
|
|
|
|
// 这里仅是事件监听【如果socket关闭了会执行】
|
|
// this.socketTask.onClose((res) => {
|
|
// console.log("已经被关闭了", res);
|
|
// this.is_open_socket = false;
|
|
// if(res.code != 4000){ //不是主动关闭就重连
|
|
// this.reconnect();
|
|
// }
|
|
// })
|
|
}
|
|
|
|
//发送消息
|
|
send(value){
|
|
// 注:只有连接正常打开中 ,才能正常成功发送消息
|
|
this.socketTask.send({
|
|
data: value,
|
|
async success() {
|
|
console.log("消息发送成功");
|
|
},
|
|
});
|
|
}
|
|
//开启心跳检测
|
|
start(){
|
|
this.heartbeatInterval = setTimeout(()=>{
|
|
this.data={value:"传输内容",method:"方法名称"}
|
|
console.log(this.data)
|
|
this.send(JSON.stringify(this.data));
|
|
},this.timeout)
|
|
}
|
|
//重新连接
|
|
reconnect(){
|
|
//停止发送心跳
|
|
clearInterval(this.heartbeatInterval)
|
|
//如果不是人为关闭的话,进行重连
|
|
if(!this.is_open_socket){
|
|
this.reconnectTimeOut = setTimeout(()=>{
|
|
this.connectSocketInit();
|
|
},3000)
|
|
}
|
|
}
|
|
|
|
close() {
|
|
this.socketTask.close({
|
|
code: 4000,
|
|
reason: '主动关闭',
|
|
async success() {
|
|
console.log('主动关闭');
|
|
},
|
|
fail(err) {
|
|
console.log('调用close函数失败', err);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
export default websocketUtil; |