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

这篇具有很好参考价值的文章主要介绍了【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)
        }
    },
})

 文章来源地址https://www.toymoban.com/news/detail-698363.html

  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. 如果解析失败或发生错误,将错误信息打印在控制台上。

到了这里,关于【vue3】前端应用中使用WebSocket与服务器进行通信并管理连接状态。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记:vite3+vue3+axios前端项目跨域问题解决【前端和服务器nginx配置】

    前言:什么是跨域,网上一搜一大把,所以这里直接跳过,直入主题。 处理方式:不通过后端处理跨域,通过前端+服务器nginx处理。 1.前端涉及处理跨域的必要配置(开发环境、生产环境):vite3、vue3、axios 2.服务器涉及处理跨域的配置(生产环境):nginx【主要用到其配置

    2024年02月01日
    浏览(37)
  • Vue 如何使用WebSocket与服务器建立链接 持续保持通信

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

    2024年01月18日
    浏览(29)
  • WebSocket心跳机制/服务器端开连接(JS前端)

    情景: 前端使用 WebSocket 的时候,后端长时间没有推送数据,导致 WebSocket 连接经常断开,后端也会报错。 解决方法: 通过 心跳机制 让前端和后端始终保持连接。 代码: 使用方法: 注意: 后端收到以后需要给前端返回数据,否则还是无法保持连接 代码参考了:https://bl

    2024年02月12日
    浏览(27)
  • 使用宝塔面板部署Node.js+Mysql服务和Vue3-Admin项目到云服务器上

    准备工作 一台云服务器,可以先用免费试用一个月的服务器进行练手;我这里选择的是腾讯云的轻量云服务器; 1、在云服务器上安装宝塔面板 宝塔面板官网地址:https://www.kancloud.cn/chudong/bt2017/424209 1.1 安装Xshell脚本工具,通过这个工具来连接云服务器,进行宝塔面板的安装

    2024年01月25日
    浏览(40)
  • 使用node搭建服务器,前端自己写接口,将vue或react打包后生成的dist目录在本地运行

    vue项目打包后生成的dist目录如果直接在本地打开index.html,在浏览器中会报错,无法运行起来。 通常我是放到后端搭建的服务上面去运行,当时前端自己也可以是node,nuxt搭建服务器,写接口等等 如果想在本地运行,我们可以借助node.js+express搭建一个服务器,将打包后的文件部

    2024年02月03日
    浏览(28)
  • 使用node简单搭建websocket服务器

    我们都知道,http协议通信只能由客户端发起,然后服务端再做出响应;但是websocket协议最大的特点是服务端可以主动向客户端推送消息,客户端也可以主动向服务器发送消息 往常实现双向通信的方法主要是 轮询, 客户端通过定时器,每隔一段时间就会主动发送请求给服务器

    2024年02月05日
    浏览(38)
  • vue项目访问服务器时:WebSocket connection to ‘wss://XXXX/‘的解决方法

    关于WebSocke的介绍:新手入门:websocket 简单来说,WebSocket 为web应用程序客户端和服务端之间(客户端服务端)提供了一种全双工通信机制,报错是因为发送报文的过程出现问题。 我的报错如下: 程序可以正常运行使用,但一直打印报错太难受了,问了一下同事,也查了一下

    2024年02月11日
    浏览(33)
  • vue3 history模式配置及nginx服务器配置

    vue的路由方式有hash模式和history模式,history模式路由看起来有好些,路由路径里没有#号,而hash模式默认是有#号的。 vue3开始默认新建的项目都是history模式,不过history模式打包后想要使用正常访问的话,需要后端服务器进行配置才可以,否则可能会出现刷新后404的问题。一般

    2024年02月05日
    浏览(29)
  • Vite打包Vue3项目,利用宝塔部署到服务器

    按照如图的配置,将vite.config.js的 base 改为  /dist/ 然后npm run build 就会得到左边的这个dist文件夹,这就是打包好的文件 创建项目以及项目配置 我在服务器安装的php是5.6版本的,其他版本可以自己试一下 解决刷新404问题 上传成功之后,文件目录结构是这样的 (顺序不一定要

    2024年04月13日
    浏览(46)
  • vue2 vue3 配置代理 服务器返回404- 500的解决思路

    一、服务器返回500拒绝请求 1,服务器的服务没有起来 2,vue本地的代理地址填写错误,可能代理到别家的服务器了 正确的写法如下:(主要体现在ip地址和端口是否错误,当然也需要检查是否多了字母及符号。) http://112.59.21.18:8080 二、如果返回500,未找到页面404,说明是接口

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包