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;