vue3中WebSocket的使用

1.先确立WebSocket的连接是否建立

2.连接后看是否接收到服务器发来的消息

3.WebSocket 连接可关闭(组件销毁时关闭)

4.如果发生错误,将其传递给 Promise 的 reject 函数

代码如下:

// src/types/websocket.js
import { onUnmounted } from "vue";

let socket2 = null;

export function web(url,onMessage,res) {
  return new Promise((resolve, reject) => {
    socket2 = new WebSocket(url);
    socket2.onopen = () => {
      socket2.send(res);(也可在建立成功后给服务器就发消息或者传参数)
      console.log("WebSocket 连接已建立");
    };

    socket2.onmessage = (event) => {
      const data = JSON.parse(event.data);
      console.log("收到来自服务器的消息:", data);
      socket2.send(res);(收到服务器的消息后在发送消息)
      onMessage(data);
    };

    socket2.onclose = () => {
      console.log("WebSocket 连接已关闭");
    };

    socket2.onerror = (error) => {
      console.error("WebSocket 错误:", error);
      reject(error); // 如果发生错误,将其传递给 Promise 的 reject 函数
    };
  });
}

// 用于在组件卸载时关闭 WebSocket 连接
export function useCloseWebSocketOnUnmounted() {
  onUnmounted(() => {
    if (socket2) {
      console.log("正在关闭 WebSocket 连接...");
      socket2.close(); // 直接关闭连接
    }
  });
}

// 用于发送消息
export const sendMessage = () => {
  socket2.send("Hello Server");

  console.log(socket2)
};
// sendMessage()
页面调用可以传url,onMessage,res(参数),代码如下:
import { useCloseWebSocketOnUnmounted, web } from '@/types/webscoket'
import { onMounted,ref } from 'vue'

// 在组件加载时建立 WebSocket 连接
onMounted(() => {
  web('ws://10.217.101.252:8003', (data) => {
  }, 1)
})
// 在组件卸载时关闭 WebSocket 连接
useCloseWebSocketOnUnmounted()

### Vue3WebSocket 配合 HTTP 协议使用的教程 在现代 Web 开发中,WebSocket 提供了一种全双工通信协议,允许客户端和服务端之间实时交换消息。然而,在实际开发场景中,通常会结合 HTTP 协议来完成初始化配置或其他辅助功能。 以下是关于如何在 Vue3 前端项目中使用 WebSocket 并配合 HTTP 协议进行通信的详细介绍: --- #### 一、Vue3WebSocket 的基本实现 为了在 Vue3 中集成 WebSocket,可以通过原生 JavaScript 的 `WebSocket` 对象或者第三方库(如 `Socket.IO` 或者 `Vuex-Websocket` 插件)来实现[^1]。 ##### 实现步骤说明: 1. **创建 WebSocket 连接** 在组件生命周期钩子函数(如 `onMounted` 或 `created`)中实例化 WebSocket。 2. **绑定事件监听器** 使用 `addEventListener` 方法分别监听 `open`, `message`, 和 `close` 等事件。 3. **发送数据** 调用 `send()` 方法向服务端发送 JSON 数据,并确保数据被序列化为字符串形式。 4. **断开连接** 当不再需要 WebSocket 时,调用 `close()` 方法释放资源。 以下是一个基于 Vue3 Composition API 的示例代码: ```javascript <template> <div> <button @click="sendMessage">Send Message</button> <p>Received message: {{ receivedMessage }}</p> </div> </template> <script setup> import { ref, onMounted, onUnmounted } from &#39;vue&#39;; const socketUrl = &#39;ws://example.com/websocket&#39;; // 替换为你的 WebSocket URL const receivedMessage = ref(&#39;&#39;); let socket = null; // 创建 WebSocket 连接 onMounted(() => { socket = new WebSocket(socketUrl); // 监听连接打开事件 socket.addEventListener(&#39;open&#39;, () => { console.log(&#39;WebSocket connection opened&#39;); }); // 接收来自服务端的消息 socket.addEventListener(&#39;message&#39;, (event) => { const data = JSON.parse(event.data); receivedMessage.value = data.message; console.log(&#39;Received:&#39;, data); }); // 监听连接关闭事件 socket.addEventListener(&#39;close&#39;, () => { console.log(&#39;WebSocket connection closed&#39;); }); }); // 发送消息到服务端 function sendMessage() { const payload = { action: &#39;test&#39;, value: &#39;Hello Server&#39; }; if (socket.readyState === WebSocket.OPEN) { socket.send(JSON.stringify(payload)); console.log(&#39;Sent:&#39;, payload); } } // 断开 WebSocket 连接 onUnmounted(() => { if (socket && socket.readyState !== WebSocket.CLOSED) { socket.close(); } }); </script> ``` 此代码展示了如何在 Vue3 中管理 WebSocket 生命周期并与其交互[^3]。 --- #### 二、HTTP 协议的作用与配合方式 虽然 WebSocket 是一种独立于 HTTP 的协议,但在某些情况下仍需借助 HTTP 来补充其不足之处。例如: - **获取初始状态**:通过 HTTP 请求从服务端拉取当前的状态信息作为 WebSocket 初始化的基础。 - **认证机制**:利用 HTTP Cookie 或 Token 完成身份验证后再建立 WebSocket 连接。 - **错误恢复**:当 WebSocket 出错或中断时,重新发起 HTTP 请求以同步最新数据。 下面展示了一个简单的流程图描述两者协作关系: 1. 用户访问页面 -> 后端返回 HTML/CSS/JS 文件; 2. 页面加载完成后触发 HTTP GET 请求查询必要参数; 3. 根据响应结果构建完整的 WebSocket 地址; 4. 成功建立 WebSocket 连接后持续接收推送通知。 --- #### 三、综合案例分析 假设我们需要设计一个聊天应用,其中涉及用户登录以及在线消息传递两个主要模块,则可以按照如下逻辑展开编码工作: 1. 登录阶段: - 用户提交表单至 `/api/login` 接口; - 如果成功则保存 session ID 到本地存储以便后续请求携带; 2. 加载主界面的同时尝试启动 WS 通道: ```javascript const sessionId = localStorage.getItem(&#39;sessionId&#39;) || &#39;&#39;; const wsEndpoint = `${window.location.protocol.replace(/^http/, &#39;ws&#39;)}://${window.location.host}/chat?session=${sessionId}`; ``` 3. 若检测到未授权异常,则跳转回登陆页重试直至满足条件为止。 以上过程充分体现了 RESTful API 和持久型双向通讯技术相结合的优势所在[^4]。 --- ### 总结 本文介绍了如何在 Vue3 应用程序中设置和维护 WebSocket 连接,同时还探讨了它同传统超文本传输标准之间的关联性及其应用场景价值。希望这些内容能够帮助开发者更好地理解两者的区别与联系从而做出合理的选择适应不同业务需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值