baozhengrui

导航

websocket用法

WebSocket 是一种在客户端和服务器之间建立持久化连接的协议,允许双向通信。它适用于实时应用程序,如聊天应用、在线游戏或实时数据流。以下是 WebSocket 在 Vue.js 中的基本用法:

1. 建立 WebSocket 连接

首先,创建 WebSocket 连接:

const socket = new WebSocket('ws://your-server-url'); // 替换为你的 WebSocket 服务地址

2. 监听连接成功

监听 WebSocket 连接成功事件:


socket.onopen = function(event) {
  console.log('WebSocket connection established');
};

3. 接收消息

监听从服务器发送来的消息:


socket.onmessage = function(event) {
  console.log('Message from server:', event.data);
};

4. 发送消息

向服务器发送消息:

socket.send(JSON.stringify({ type: 'greeting', message: 'Hello, Server!' }));

5. 监听连接关闭

监听连接关闭事件:


socket.onclose = function(event) {
  console.log('WebSocket connection closed', event);
};

6. 处理错误

监听 WebSocket 错误事件:

socket.onerror = function(error) {
  console.error('WebSocket Error:', error);
};

7. 关闭 WebSocket 连接

当不再需要 WebSocket 连接时,可以手动关闭连接:

socket.close();

在 Vue 组件中使用 WebSocket

通常,你会在 Vue 组件中创建 WebSocket 连接,确保在组件销毁时关闭连接:


export default {
  data() {
    return {
      socket: null,
      message: ''
    };
  },
  mounted() {
    this.socket = new WebSocket('ws://your-server-url');
    
    this.socket.onopen = () => {
      console.log('WebSocket connection established');
    };

    this.socket.onmessage = (event) => {
      this.message = event.data; // 处理来自服务器的消息
    };

    this.socket.onerror = (error) => {
      console.error('WebSocket Error:', error);
    };

    this.socket.onclose = () => {
      console.log('WebSocket connection closed');
    };
  },
  beforeDestroy() {
    if (this.socket) {
      this.socket.close(); // 组件销毁时关闭连接
    }
  }
};

这样,你就可以在 Vue 组件中使用 WebSocket 进行实时通信。

8.实例:

//window.location.protocol 来判断当前页面是否使用 HTTPS 协议:
let protocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://';  //判断是系统是哪个访问
connectWebSocket() {
      let self = this;

    // 获取当前页面的主机和端口console.log(window.location.host); // 输出类似 'www.example.com:8080'
      const websocketUrl = `ws://${location.host}/audioWebSocket/ws/data`;

      self.websocket = new WebSocket(websocketUrl);

      // 心跳检测定时器
      let heartbeatInterval = null;

      self.websocket.onopen = () => {
        console.log('WebSocket 连接已打开');
        // 连接成功后开始心跳检测
        heartbeatInterval = setInterval(() => {
          if (self.websocket.readyState === WebSocket.OPEN) {
            self.websocket.send(JSON.stringify({ type: 'heartbeat' }));
          }
        }, 30000); // 每30秒发送一次心跳消息

        // 可以在这里添加其他连接成功后的逻辑
      };

      self.websocket.onmessage = (event) => {
        let result = JSON.parse(event.data);
        if (result.sessionId) {
          self.sessionId = result.sessionId;
          console.log(self.sessionId, 'WebSocket 连接已打开', this.sessionId);
        } else {
          let mimeType = result.type + '/' + result.fileType;
          let base64Image = '';

          switch (this.fileType) {
            case 'video':
            case 'audio':
            case 'text':
              base64Image = '/navy' + result.fileUrl;
              break;
            default:
              base64Image = '/navy' + result.content;
              break;
          }

          let exceed = '';
          console.log('up33',this.uploadPageList)
          this.uploadPageList.forEach((item) => {
            if (item.uid == result.id) {
              this.ids.push(item.uid);
              item = Object.assign(item, result);
              item.check = false;
              item.scanning = false;
              item.isIdenty = true; // 识别完成,显示识别结果
              item.imgSrc = base64Image;
              item.time = getNowDate(result.createTime);
              item.reliability = (Number(item.reliability) * 100).toFixed(2);
              item.res = '查看报告';
              item.activ = false;
              item.raw = item.raw
              exceed = item;
            }
          });

          this.getScanInfo(this.ids, exceed);
          this.uploadList = JSON.parse(JSON.stringify(this.uploadList));
        }
      };

      self.websocket.onerror = (e) => {
        console.log('连接错误', e);
        self.reconnectWebSocket();
      };

      self.websocket.onclose = () => {
        console.log('WebSocket 连接已关闭');
        self.reconnectWebSocket();
      };

      // 自动重连函数
      self.reconnectWebSocket = () => {
        clearInterval(heartbeatInterval); // 清除心跳检测定时器
        setTimeout(() => {
          console.log('尝试重新连接 WebSocket...');
          self.connectWebSocket(); // 重新连接
        }, 3000); // 3秒后重试
      };
    },

beforeDestroy() {
    Bus.$off("changeType")
    if (this.websocket) {
      this.websocket.close();
    }
    clearInterval(heartbeatInterval);
  },

posted on 2024-11-05 16:47  芮艺  阅读(4)  评论(0编辑  收藏  举报