位置: IT常识 - 正文

一个简单的websocket hook(一个简单的web项目名称)

编辑:rootadmin
一个简单的 vue3 的 websocket hook. 有以下基础功能: 创建链接 失败重连 发送心跳包 import { ref } from "vue"; export interface WS_CONFIG { url: string; // ws链接地址 sendData?: Record ...

推荐整理分享一个简单的websocket hook(一个简单的web项目名称),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:一个简单的web的页面,一个简单的web代码,一个简单的web app要包含的内容清单,一个简单的web项目名称,一个简单的web项目例子,一个简单的web项目例子,一个简单的web作业,一个简单的web项目例子,内容如对您有帮助,希望把文章链接给更多的朋友!

一个简单的 vue3 的 websocket hook. 有以下基础功能:

创建链接失败重连发送心跳包import { ref } from "vue";export interface WS_CONFIG { url: string; // ws链接地址 sendData?: Record<string, any>; // 请求数据 reconnectSec?: number; // 请求异常重连间隔 needHeart?: boolean; // 是否需要心跳 heartSec?: number; // 心跳间隔 heartData?: unknown; // 心跳时发送的数据}export default function <T>({ url, sendData = {}, heartSec = 1000 * 30, needHeart = false, reconnectSec = 1000 * 30, heartData = "ping",}: WS_CONFIG) { // 响应数据 const wsData = ref<T | undefined>(); // 重试次数 const retryNumber = ref<number>(0); let socket: WebSocket | null = null; let heart_Interval: number | null = null; let lockConnect = false; let number = 0; // 创建链接 function connect() { // 重连之前,关闭上次的连接 if (socket) { socket.close(); } socket = new WebSocket(url); retryNumber.value = number++; // 连接成功回调 socket.onopen = () => { console.log(`${url} open event - ${new Date()}`); // 维持心跳 needHeart && heart(); // 清空重试次数 number = 0; retryNumber.value = 0; // 发送数据 socket?.send(JSON.stringify(sendData)); }; // 连接断开回调 socket.onclose = (e) => { console.log(`${new Date()}${url} close eventcode: ${e.code};reason: ${e.reason};isTrusted: ${e.isTrusted}; `); console.log(`reconnect - ${new Date()}`); // 进行重连 reconnect(); }; // 连接失败回调 socket.onerror = (e) => { console.log(`${url} error event`, e); // 进行重连 reconnect(); }; // 接收到数据 socket.onmessage = (e: MessageEvent<string>) => { const { data } = e; const _data = (typeof data === "string" ? JSON.parse(data) : data) as T; wsData.value = _data; }; } // 心跳函数,维持链接不断开 function heart() { clearHeart(); heart_Interval = setInterval(() => { socket?.send( typeof heartData === "string" ? heartData : JSON.stringify(heartData) ); }, heartSec); } // 断开心跳 function clearHeart() { heart_Interval && clearInterval(heart_Interval); } // 重连 function reconnect() { // 控制重连频率 if (lockConnect) { return; } lockConnect = true; // 清除心跳 clearHeart(); setTimeout(() => { lockConnect = false; connect(); }, reconnectSec); } connect(); // 关闭链接 function clearWS() { socket?.close(); clearHeart(); } return { wsData, retryNumber, clearWS, };}
本文链接地址:https://www.jiuchutong.com/zhishi/309246.html 转载请保留说明!

上一篇:电脑学习网解决方案:危险数据盘为windwos分区,为了你的数据安全,请手动挂载,本脚本不执行任何操作(网上学电脑哪个软件好)

下一篇:帝国cms导航怎么加nofollow(帝国cms导航站模板)

  • 联通手机上网慢解决(联通手机上网慢)(联通手机上网网速慢)

  • 怎么单独给b站设置静音(怎么单独给b站设置静音ipad)

  • 苹果13promax如何显示电池电量(苹果13promax如何强制重启)

  • 常用104键位的键盘通常分为几个区(104键盘功能键介绍)

  • 抖音怎么看对方注销了(抖音怎么看对方有没有关注你)

  • 华为p30换屏幕影响使用吗(华为p30换屏影响使用吗)

  • 双十一天猫规定的发货时间(双十一天猫有什么优惠活动)

  • ipad怎么清理运行程序(ipad怎么清理运存)

  • vivox27备忘录怎么变成黑色(vivi的备忘录在哪)

  • 苹果11手机亮度突然变暗(苹果11手机亮度老是自动暗下来怎么办)

  • 拼多多怎么选择2个不同的东西一块付款(拼多多怎么选择发货地区)

  • 为什么FLASH一安装就不见了(为什么flash安装完自动删除)

  • 为什么安卓微信新表情没有(为什么安卓微信不能滑动删除信息)

  • whatsapp老是连不上网络(whatsapp连不上)

  • 网络机顶盒有线连接失败(网络机顶盒有线网络怎么设置)

  • 手机下载的音乐文件在哪里(手机下载的音乐怎么导出来)

  • vivoz5菜单键如何设置(vivo手机的菜单键是哪个键)

  • 如何解决微信投票频繁(如何解决微信投票失败)

  • 苹果耳机a1602是国行么(iphone耳机a1602)

  • soa指的是什么(soap?)

  • 闲鱼实人认证总是失败(闲鱼实人认证好慢)

  • iphone8p电池多少毫安(苹果8p手机电池多少)

  • 银行信息收不到怎么办(银行卡信息收不到了咋回事)

  • 银行卡留的电话怎么改(银行卡留的电话号码如何重新更改)

  • 手机qq资料怎么弄空白(手机qq资料怎么把空间去掉)

  • oppor11设置时间水印(oppo r11怎么设置时间)

  • 小程序嵌入H5页面获取公众号openId的方法(小程序嵌入h5页面可以不写安全地址吗为什么)

  • rsync命令 远程数据同步工具(rsync连接)

  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设 电脑维修 湖南楚通运网络