安琪酵母(西藏)益生菌信息采集中心智能实验室
longyvfengyun
2023-07-06 a3c6e3a5177b15021dad5788688294b1d863717a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import {ref} from "vue";
 
/**
 * websocket公用方法
 */
const socket = ()=>{
  let timer = null;
  let ws = null;
  let isConnect = ref(false);
  let count = 0;
 
  // WebSocket连接
  const connectWebsocket = (url) => {
    if (count > 5) {
      connectError()
      return
    }
    try { // 正在建立连接
      ws = new WebSocket(URL)
      initWebSocket() // 初始化WebSocket连接
    } catch { // 建立连接出错,重新连接
      connect()
    }
  }
 
  // 重新连接WebSocket
  const connect = ()=>{
    if(isConnect.value) return
    console.info('尝试重新连接WebSocket');
    if(timer) clearTimeout(timer)
    timer = setTimeout(()=>{
      count++;
      connectWebsocket()
    }, 5000);
  }
 
  // 初始化WebSocket连接
  const initWebSocket = ()=>{
    ws.onopen = function () { // WebSocket连接成功
      isConnect.value = true;
      console.success('WebSocket连接成功')
    }
    ws.onerror = function () { // WebSocket连接发生错误
      isConnect = false;
      connect()
      console.error('WebSocket连接发生错误,正在尝试重新连接')
    }
    ws.onclose = function (e) { // 已关闭WebSocket连接
      isConnect.value = false
      console.warn('已关闭WebSocket连接')
    }
    ws.onmessage = function (data) { // 接收到服务端发送的数据
      receive(data)
    }
  }
 
  const connectError = () => {
    console.log('WebSocket连接失败')
    clearTimeout(timer)
  }
 
 
  return {
    ws,
    connectWebsocket,
  };
};
export default socket;