当前位置: 首页 > news >正文

【vue3】前端应用中使用WebSocket与服务器进行通信并管理连接状态。

1、写一个hook函数

export const useWebsocketToStore = ({ onMessage }): any => {const url = 'ws:地址' + Math.random()const onConnected = () => {}const onDisconnected = () => {}const onError = () => {}const onMessageDefault = (ws: WebSocket, event: MessageEvent) => {try {const res: ResWSInfoAlarm = JSON.parse(event.data)console.log(res)} catch (e) {console.log(e)}}const { status, data, send, open, close } = useWebSocket(url, {heartbeat: {message: 'ping',interval: 5000,pongTimeout: 1000,},autoReconnect: {retries: 3,delay: 1000,onFailed() {console.log('Failed to connect WebSocket after 3 retries')},},onConnected: onConnected,onDisconnected: onDisconnected,onError: onError,onMessage: onMessage ?? onMessageDefault,})return {status,close,send,open,}
}
  1. url是WebSocket的服务器地址,其中Math.random()用于生成一个随机数,以避免缓存问题。
  2. onConnectedonDisconnectedonError是连接建立、断开和出错时的回调函数,你可以根据实际需求来定义它们。
  3. onMessageDefault是当接收到消息时的默认处理函数,在这里将接收到的消息解析为JSON对象,并打印在控制台上。
  4. 使用useWebSocket自定义Hook函数创建WebSocket连接,传入连接的URL和一些配置选项,如心跳设置、自动重连等。
  5. 回了一些状态和方法:status表示连接状态,data保存接收到的数据,send用于向服务器发送消息,open用于手动打开连接,close用于关闭连接。

2、vue页面中使用

const webSocketToStore = useWebsocketToStore({onMessage: (ws: WebSocket, event: MessageEvent) => {try {const res: ResWSInfoAlarm = JSON.parse(event.data)if (res.tenantid === tenantId.value) {if (res.type === EnumAlarmDialog.info_alarm) {wsStore.setInfoAlarmCache(res.data)} else if (res.type === EnumAlarmDialog.hazard_alarm) {openDialogHazard(res.data as any)wsStore.initDangerAlarmCache()} else if (res.type === EnumAlarmDialog.video_alarm) {openDialogVideo(res.data as any)wsStore.initVideoAlarmCache()}}} catch (e) {console.log(e)}},
})

 

  1. 使用useWebsocketToStore自定义Hook函数创建WebSocket连接,并传入一个配置对象。
  2. 在配置对象中,指定了onMessage回调函数。当接收到消息时,会进入该回调函数进行处理。
  3. onMessage回调函数中,首先尝试将接收到的消息解析为ResWSInfoAlarm类型的JSON对象。
  4. 在解析成功后,根据解析出来的对象的属性进行判断和处理,具体逻辑如下:
    • 如果解析出来的tenantid属性等于tenantId.value的值,则进行下一步判断;
    • 根据解析出来的type属性的不同值,执行不同的操作。如果typeEnumAlarmDialog.info_alarm,则调用wsStore.setInfoAlarmCache方法,如果typeEnumAlarmDialog.hazard_alarm,则调用openDialogHazard方法并调用wsStore.initDangerAlarmCache方法,如果typeEnumAlarmDialog.video_alarm,则调用openDialogVideo方法并调用wsStore.initVideoAlarmCache方法。
  5. 如果解析失败或发生错误,将错误信息打印在控制台上。
http://www.lryc.cn/news/112838.html

相关文章:

  • 服务端高并发分布式结构演进之路
  • 微服务基础总结
  • 实现vscode上用gdb调试stm32
  • 第4章 变量、作用域与内存
  • Python爬虫遇到重定向问题解决办法汇总
  • R并行计算
  • STM32 低功耗-待机模式
  • 极海APM32F003F6P6烧写问题解决记录
  • 【大数据】Flink 详解(一):基础篇
  • ChatGPT 作为 Python 编程助手
  • 饿了么输入框限制只能输入数字,并且保留小数
  • kylin-Desktop gsettings 获取或设置系统配置
  • setmap使用
  • Python3 网络爬虫开发实战
  • docker: CMD和ENTRYPOINT的区别
  • DC电源模块对于定制的要求主要有这几点
  • Kubernetes高可用集群二进制部署(六)Kubernetes集群节点添加
  • 网关 GateWay 的使用详解、路由、过滤器、跨域配置
  • vsocde里面远程连接服务器报could not esatablish connection xxxx
  • Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改
  • 无涯教程-Perl - foreach 语句函数
  • easyWechat 5.x 复写代码 获取企业微信授权用户敏感信息
  • 医疗器械研发中的可用性工程实践(一)
  • LNMP搭建
  • 软件测试分类总结
  • 模糊PID(三角隶属度函数模糊化CODESYS ST代码)
  • 探索人工智能 | 计算机视觉 让计算机打开新灵之窗
  • 7.物联网操作系统互斥信号量
  • Vue - Element el-form 表单对象多层嵌套校验
  • elementUI全屏loading的使用(白屏的解决方案)