Vue 如何使用WebSocket与服务器建立链接 持续保持通信

WebSocket

浏览器通过JavaScript向服务器发出建立WebSocket链接的请求,链接建立后,客户端和服务器端就可以通过TCP链接直接交互数据。WebSocket链接后可以通过send()方法来向服务器发送数据,并通过onnessage事件来接受服务器返回的数据。

创建WebSocket对象

let ws = new WebSocket(server);

WebSocket参考

WebSocket - Web API 接口参考 | MDN

代码

<template>
  <el-row class="app-container">
    <el-button type="primary" @click="testSend">主要按钮</el-button>
  </el-row>
</template>

<script>

export default {
  name: 'Monitoring',
  data() {
    return {
      websocket: null, // WebSocket对象
      reconnectInterval: 3000, // 重连间隔时间(毫秒)
      restartWebsocket: null , // 重启定时器
      heartbeatInterval: null, // 心跳定时器
    };
  },
  created() {
    if (typeof WebSocket == "undefined") {
      console.log("您的浏览器不支持WebSocket");
    } else {
      this.setupWebSocket(); // 创建WebSocket连接
    }
  },
  methods: {
    testSend() { // 测试
      const send = {
        "keywords": "xxx",
        }
      this.sendMessage(JSON.stringify(send));
    },
    // websocket初始化
    setupWebSocket() {
      this.websocket = new WebSocket("ws://xxx"); // 创建WebSocket连接
      this.websocket.onopen = this.onWebSocketOpen; // WebSocket连接打开时的处理函数
      this.websocket.onmessage = this.onWebSocketMessage; // 收到WebSocket消息时的处理函数
      this.websocket.onclose = this.onWebSocketClose; // WebSocket连接关闭时的处理函数
    },
    closeWebSocket() { // 关闭
      if (this.websocket) {
        this.websocket.close(); // 关闭WebSocket连接
      }
    },
    // 开启 WebSocket;启动心跳检测
    onWebSocketOpen() {
      console.log("WebSocket connection is open");
      this.startHeartbeat();
    },
    // 处理从服务器接收的消息
    onWebSocketMessage(event) {
      if (event.data) {
        const message = JSON.parse(event.data);
        //    根据业务来处理数据
        console.log("Message from server ", message);
      }
    },
    // 关闭 WebSocket;停止心跳检测
    onWebSocketClose() {
      console.log("WebSocket connection is closed");
      this.stopHeartbeat(); // WebSocket连接关闭时,停止心跳检测
      this.restartWebsocket = setTimeout(this.setupWebSocket, this.reconnectInterval); // 在一定时间后重连WebSocket
    },
    // 向服务器发送消息
    sendMessage(message) {
      if (this.websocket && this.websocket.readyState === WebSocket.OPEN) {
        this.websocket.send(message); // 发送消息到WebSocket服务器
      }
    },
    // 开启心跳检测
    startHeartbeat() {
      this.heartbeatInterval = setInterval(() => {
        if (this.websocket && this.websocket.readyState === WebSocket.OPEN) {
          this.websocket.send(); // 发送心跳消息
        }
      }, 1000); // 每1秒发送一次心跳
    },
    // 停止心跳检测
    stopHeartbeat() {
      if (this.heartbeatInterval) {
        clearInterval(this.heartbeatInterval); // 停止心跳检测定时器
      }
    },
    // 停止重启检测
    stopRestartWebsocket() {
      if (this.restartWebsocket) {
        clearInterval(this.restartWebsocket); // 停止心跳检测定时器
      }
    },
  },
  beforeDestroy() {
    this.stopHeartbeat() // 停止心跳
    this.stopRestartWebsocket() // 停止重启
    this.closeWebSocket(); // 在组件销毁前关闭WebSocket连接
  },
}
</script>

<style scoped>

</style>

要在Vue使用WebSocket与C++通信,您需要编写WebSocket客户端代码并将其与C++服务器端代码配对。 以下是一些步骤,您可以遵循这些步骤来在Vue使用WebSocket与C++进行通信: 1. 在Vue项目中安装WebSocket库。您可以使用Vue官方提供的vue-websocket库,或者使用其他开源WebSocket库,如socket.io或ws。 2. 创建一个WebSocket客户端对象,并指定要连接到的C++服务器的IP地址和端口号。您可以在Vue组件中创建WebSocket对象,或者在Vue实例中创建全局WebSocket对象。 3. 在Vue中编写发送数据到C++服务器的函数。您可以使用WebSocket对象的send方法发送数据。如果您需要将JSON数据发送到C++服务器,则可以使用JSON.stringify方法将JSON数据转换为字符串。 4. 在C++服务器端编写WebSocket服务器代码。您可以使用WebSocket库,例如libwebsockets或uWebSockets,来实现WebSocket服务器。 5. 在C++服务器端编写接收从Vue发送的数据的函数。您可以使用WebSocket库提供的回调函数来处理接收到的数据。如果您需要将JSON数据发送回Vue客户端,则可以使用JSON库,例如RapidJSON或nlohmann JSON,将JSON数据转换为字符串。 6. 在Vue中编写处理从C++服务器接收的数据的函数。您可以使用WebSocket对象的onmessage事件处理程序来处理接收到的数据。如果您收到的数据是字符串,则可以使用JSON.parse方法将字符串转换为JSON对象。 7. 在Vue组件中使用发送和接收数据的函数。您可以在Vue组件的方法中调用发送数据的函数,并使用Vue组件的数据属性来存储从C++服务器接收的数据。 这些步骤应该能够帮助您在Vue使用WebSocket与C++进行通信。请注意,WebSocket通信需要在C++服务器端和Vue客户端之间建立一个持久连接,因此您需要确保C++服务器端正在运行,并且Vue客户端可以连接到它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值