1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- class websocketUtil {
- constructor(url, time) {
- 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
- },
- });
- this.socketTask.onOpen((res) => {
- console.log("WebSocket连接正常!");
- clearTimeout(this.reconnectTimeOut)
- clearTimeout(this.heartbeatInterval)
- this.is_open_socket = true;
- this.start();
- // 注:只有连接正常打开中 ,才能正常收到消息
- // this.socketTask.onMessage((res) => {
- // let data = JSON.parse(res.data)
- // console.log(data);
- // });
- })
- // 监听连接失败,这里代码我注释掉的原因是因为如果服务器关闭后,和下面的onclose方法一起发起重连操作,这样会导致重复连接
- // uni.onSocketError((res) => {
- // console.log('WebSocket连接打开失败,请检查!');
- // this.is_open_socket = false;
- // this.reconnect();
- // });
- // 这里仅是事件监听【如果socket关闭了会执行】
- this.socketTask.onClose(() => {
- console.log("已经被关闭了")
- this.is_open_socket = false;
- this.reconnect();
- })
- }
-
- //发送消息
- send(value){
- // 注:只有连接正常打开中 ,才能正常成功发送消息
- this.socketTask.send({
- data: value,
- async success() {
- console.log("消息发送成功");
- },
- });
- }
- //开启心跳检测
- start(){
- this.heartbeatInterval = setTimeout(()=>{
- this.data={value:"传输内容",method:"方法名称"}
- this.send(JSON.stringify(this.data));
- },this.timeout)
- }
- //重新连接
- reconnect(){
- //停止发送心跳
- clearInterval(this.heartbeatInterval)
- //如果不是人为关闭的话,进行重连
- if(!this.is_open_socket){
- this.reconnectTimeOut = setTimeout(()=>{
- this.connectSocketInit();
- },3000)
- }
- }
- }
- module.exports = websocketUtil
|