这是一个使用 Vue3 组合式 API 和 TS 封装 websocket 的例子

这个组件在 setup 中:

  • 创建了一个 WebSocket 连接
  • 定义了 sendMessage 方法发送消息
  • 监听 WebSocket 的开启、接收消息和关闭事件
  • 暴露 sendMessage、onClose 方法给模板使用
import {ref} from 'vue'

export default {
setup() {
const ws = ref<WebSocket>()
const text = ref<number | string>(1)
const reconnect = ref<boolean>(false) function init() {
// http://www.websocket-test.com/
ws.value = new WebSocket('ws://121.40.165.18:8800') // 实例 - 打开连接
ws.value.onopen = () => {
console.log('WebSocket connected!')
reconnect.value = false
} // 实例 - 接受数据
ws.value.onmessage = ({data}) => {
console.log('Received message:', data)
} // 实例 - 监听关闭
ws.value.onclose = () => {
console.log('WebSocket closed!')
if (!reconnect.value) {
reconnect.value = true
setTimeout(init, 1000)
}
}
} // 实例 - 关闭连接
function onClose() {
ws.value?.close()
} // 实例 - 发送数据
function sendMessage(msg: any) {
text.value = msg + 1
ws.value?.send(msg + 1)
} init() return {text, sendMessage, onClose}
}
}

那么,可以通过组件:

  • 输入消息(默认是数字)并点击 发送按钮
  • 触发 sendMessage 方法,通过 WebSocket 连接发送消息
  • 接收来自 WebSocket 服务端的响应消息
  • 监听 WebSocket 状态变化
  • 触发 onClose 方法,关闭 WebSocket 连接,测试断线重连功能

使用这个组件的模板:

<div class="parent">
<div>
<input v-model="text">
<button @click="sendMessage(text)">Send</button>
</div>
<div>
<button @click="onClose">断线重连</button>
</div>
</div>

这是一个基本的 WebSocket 断线重连示例:

  • 在 setup 中处理逻辑
  • 暴露需要在模板或外部使用的方法/数据
  • 模板中可以直接使用这些方法/数据

完善的演示代码如下:

<template>
<div class="parent">
<div>
<input v-model="text">
<button @click="sendMessage(text)">Send</button>
</div>
<ul>
<li v-for="(num,idx) in list" key="idx" v-html="num"></li>
</ul>
<div v-if="active">
<button @click="onClose">断线重连</button>
</div>
</div>
</template>
import {ref} from 'vue'

export default {
setup() {
const ws = ref<WebSocket>()
const text = ref<number|string>(1)
const reconnect = ref<boolean>(false) const list = ref<any>([])
const active = ref(false)
const timer = ref(0) function init() {
// http://www.websocket-test.com/
ws.value = new WebSocket('ws://121.40.165.18:8800') // 实例 - 打开连接
ws.value.onopen = () => {
console.log('WebSocket connected!') // 断线重连 - 标记
reconnect.value = false // 断线重连 - 按钮
active.value = true // 停止重连
clearInterval(timer.value)
} // 实例 - 接受数据
ws.value.onmessage = ({data}) => {
console.log('Received message:', data)
list.value.push(data);
} // 实例 - 监听关闭
ws.value.onclose = () => {
console.log('WebSocket closed!')
if (!reconnect.value) {
connect();
}
}
} // 实例 - 关闭连接
function onClose() {
list.value = []
active.value = false
ws.value?.close()
} // 实例 - 发送数据
function sendMessage(msg: string) {
text.value = msg + 1
ws.value?.send(msg + 1)
} init() // 断线重连
function connect() {
reconnect.value = true
timer.value = setInterval(init, 1000)
} return {text, list, active, sendMessage, onClose}
}
}

ai问答:使用 Vue3 组合式API 和 TS 封装 websocket 断线重连的更多相关文章

  1. vue3组合式API

    vue3组合式API 为什么要用组合式API,我们来看看它是如何解决vue2的局限性的 1.vue2的局限性 当组件内容越来越多,逻辑越来越复杂,可读性就会降低,并且难以维护. vue2组件采用配置式 ...

  2. [Vue]浅谈Vue3组合式API带来的好处以及选项API的坏处

    前言 如果是经验不够多的同志在学习Vue的时候,在最开始会接触到Vue传统的方式(选项式API),后边会接触到Vue3的新方式 -- 组合式API.相信会有不少同志会陷入迷茫,因为我第一次听到新的名词 ...

  3. 解决WebStorm无法正确识别Vue3组合式API的问题

    1 问题描述 Vue3的组合式API无法在WebStorm中正确识别,表现为defineComponent等无法被识别: 2 尝试方案 猜想这种问题的原因是无法正确识别对应的Vue3库,笔者相信Web ...

  4. vue3组合式API介绍

    为什么要使用Composition API? 根据官方的说法,vue3.0的变化包括性能上的改进.更小的 bundle 体积.对 TypeScript 更好的支持.用于处理大规模用例的全新 API,全 ...

  5. Vue3 组合式 API 中获取 DOM 节点的问题

    模板引用 Vue 提供了许多指令让我们可以直接操作组件的模板.但是在某些情况下,我们仍然需要访问底层 DOM 元素.在模板中添加一个特殊的属性ref就可以得到该元素. 访问模板引用 <scrip ...

  6. 第三十五篇:vue3,(组合式api的初步理解)

    好家伙, 来一波核心概念:数据劫持是响应式的核心 1.由set up开始 (1)vue3中的一个新的配置项,值为一个函数. (2)组件中所用的到的:数据,方法,计算属性均要配置在set up中. (3 ...

  7. Vue3笔记(二)了解组合式API的应用与方法

    一.组合式API(Composition API)的介绍 官方文档: https://v3.cn.vuejs.org/guide/composition-api-introduction.html 组 ...

  8. 一篇文章讲明白vue3的script setup,拥抱组合式API!

    引言 vue3除了Composition API是一个亮点之外,尤大大又给我们带来了一个全新的玩意 -- script setup,对于setup大家相信都不陌生,而对于script setup有些同 ...

  9. Vue3全局APi解析-源码学习

    本文章共5314字,预计阅读时间5-15分钟. 前言 不知不觉Vue-next的版本已经来到了3.1.2,最近对照着源码学习Vue3的全局Api,边学习边整理了下来,希望可以和大家一起进步. 我们以官 ...

  10. 视音频编解码学习工程:TS封装格式分析器

    =====================================================视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习工 ...

随机推荐

  1. Jmeter之post上传文件(jmeter接口测试请求参数上传文件)

    一,上传excel等普通文件 接口测试时有接口文档的话,那就对着文档写,没api文档,就自己抓包看了. 接口文档 抓包查看 步骤一:接口请求切换至文件上传(Files Upload)栏 content ...

  2. python字符操作超全总结

    在python中,字符串是数据类型之一,属于不可变序列. 转义字符的使用 转义字符是指使用反斜杠"\"对一些特殊字符进行转义.几个常用的转义字符如下: \   -续行 \n -换行 ...

  3. SpringBoot笔记--自动配置(高级内容)(中集)

    @Enable*注解 使用该注解,需要导入相应的依赖坐标,其中的groupId标签里面写入Bean的Java文件所在的包的路径下面 spring-enable-other 还需要在SpringBoot ...

  4. Linux0.11源码学习(四)

    Linux0.11源码学习(四) linux0.11源码学习笔记 参考资料: https://github.com/sunym1993/flash-linux0.11-talk https://git ...

  5. 【CS231n assignment 2022】Assignment 2 - Part 2,优化器,批归一化以及层归一化

    前言 博客主页:睡晚不猿序程 首发时间:2022.7.23 最近更新时间:2022.7.23 本文由 睡晚不猿序程 原创 作者是蒻蒟本蒟,如果文章里有任何错误或者表述不清,请 tt 我,万分感谢!or ...

  6. RHCE服务----DNS

    实验要求: 1.建立DNS服务器,负责解析的域为openedu.com 2.要求将MX记录指向mail.openedu.com,且对应A记录为本机IP 3.要求将NS记录指向ns1.openedu.c ...

  7. IO流详解及常用方法

    1.1. 什么是IO流 IO流: Input/Output Stream 流: 指的是一串流动的数据, 在数据在流中按照指定的方向进行流动. 实现数据的读取.写入的功能. 1.2. IO流的使用场景 ...

  8. 一文了解清楚kafka消息丢失问题和解决方案

    前言 今天分享一下kafka的消息丢失问题,kafka的消息丢失是一个很值得关注的问题,根据消息的重要性,消息丢失的严重性也会进行放大,如何从最大程度上保证消息不丢失,要从生产者,消费者,broker ...

  9. Maven 的仓库、周期和插件

    一.Maven 仓库 在 Maven 的世界中,任何一个依赖.插件或者项目构建的输出,都可以称为构建.Maven 在某个统一的位置存储所有项目的共享的构建,这个统一的位置,我们就称之为仓库.任何的构建 ...

  10. 记录hive一次数据倾斜问题的解决以及思考总结

    解决数据倾斜是大数据开发中比较重要的能力,这个现象指的是分布式集群中,由于数据分发的不当,导致某个节点要处理的错误过多,导致整个计算机任务迟迟结束不了,甚至可能节点出现OOM使得任务失败 处理数据倾斜 ...