广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue websocket封装实现方法详解
  • 921
分享到

Vue websocket封装实现方法详解

2024-04-02 19:04:59 921人浏览 薄情痞子
摘要

目录1.封装的ws.js文件2.使用方法1.封装的ws.js文件 let global_callback = null let Socket = '' // 存储 websocket

1.封装的ws.js文件

let global_callback = null
let Socket = '' // 存储 websocket 连接.
let timeoutObj = null  // 心跳定时器
let serverTimoutObj = null // 服务超时定时关闭
let lockReconnect = false // 是否真正建立了连接
let timeoutnum = null // 重新连接的定时器,  没连接上会一直重连,设置延迟避免请求过多
const socketConfig = {
  url: '',
  retryTimeout: 20000 // 心跳时间 暂定20s
}
export const sendWEBsocket = function (agentData, callback) {
  global_callback = callback
  socketOnSend(agentData)
}
export const initWebSocket = function (url) {
  let weburl = url || socketConfig.url
  if (window.WebSocket) { return }
  if (!socket) {
    socket = new WebSocket(weburl)
    socketOnOpen()
    socketOnClose()
    socketOnError()
    socketOnMessage()
  }
}

export const closeWebsocket = function () {
  if (socket) {
    socket.close()
  }
  clearTimeout(timeoutObj)
  clearTimeout(serverTimoutObj)
}
function socketOnSend(data) {
  socket.send(data)
}
function socketOnOpen() {
  socket.onopen = () => {
    console.log('socket连接成功')
    start()
  }
}
// 开启心跳
function start() {
  timeoutObj && clearTimeout(timeoutObj)
  serverTimoutObj && clearTimeout(serverTimoutObj)
  timeoutObj = setTimeout(() => {
    // 这里发送一个心跳,后端收到后返回一个心跳消息
    if (socket.readyState === 1) {
      // 如果连接正常  给后端发送指定消息
      socket.send('')
      console.log('发送消息')
    } else {
      // 重连
      reconnect()
    }
    serverTimoutObj = setTimeout(() => {
      // 超时关闭连接
      socket.close()
    }, socketConfig.retryTimeout);
  }, socketConfig.retryTimeout);
}
// 重连
function reconnect() {
  if (lockReconnect) {
    return
  }
  lockReconnect = true
  timeoutnum && clearTimeout(timeoutnum)
  timeoutnum = setTimeout(() => {
    initWebSocket()
    lockReconnect = false
  }, 5000);
}
function socketOnClose() {
  socket.onclose = () => {
    console.log('socket已经关闭')
  }
}
function socketOnError() {
  socket.onerror = () => {
    reconnect()
    console.log('socket 连接失败')
  }
}
function socketOnMessage() {
  socket.onmessage = (e) => {
    global_callback(e.data)
    reset()
  }
}
// 重置心跳
function reset() {
  // 清除时间
  clearTimeout(timeoutObj)
  clearTimeout(serverTimoutObj)
  // 重启心跳
  start()
}

这里的封装export了三个方法

  • initWebSocket 用来初始化websock,可传入url
  • sendWebsocket 用来发送数据
  • closeWebsocket 用来关闭连接

2.使用方法

文件存放路径: /src/utils/ws.js

所需文件中按需引入

 1.首先需要再项目中进行初始化,如果你的项目有登陆的话,则你可以再home.Vue里面进行引入:
 ```vue
 import { initWebSocket } from ‘@/utils/ws.js’
 ···
 eport default {
      created () {
         initWebSocket ()
     } 
 }
 ```

 2. 然后在你需要获取实时数据的地方进行引入并调用 sendWebsocket 
 ```vue
 import { sendWebsocket } from ‘@/utils/ws.js’
 ···
 eport default {
      created () {
         sendWebsocket (this.onWebSocketMessage)
     },
     methods: {
         onWebSocketMessage(data) {}
     }
 }
 ```

关闭websock

 import { closeSock} from "@/api/socket";
 export default {
 	destoryed () {
 		closeSock()
 	}
 }

到此这篇关于Vue websocket封装实现方法详解的文章就介绍到这了,更多相关Vue websocket封装内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue websocket封装实现方法详解

本文链接: https://www.lsjlt.com/news/168662.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue websocket封装实现方法详解
    目录1.封装的ws.js文件2.使用方法1.封装的ws.js文件 let global_callback = null let socket = '' // 存储 WebSocket...
    99+
    2022-11-13
  • JavaScript封装Vue-Router实现流程详解
    目录摘要1.hash和history2.push go replace方法(1) push(2) go(3) replace3.监听方法4.beforeEach钩子函数5....
    99+
    2022-11-13
  • vue+elementUI面包屑组件封装方法详解
    本文实例为大家分享了vue+elementUI面包屑组件封装的具体代码,供大家参考,具体内容如下 一.选择用哪种样式 二.在组件文件夹下创建组件 三.在Bread.vue复制如下...
    99+
    2022-11-13
  • vue3.0中使用websocket,封装到公共方法的实现
    目录使用websocket,封装到公共方法vue中封装websocket问题 1.在untils文件夹下新建socket_service.js2.在main.js里引用2....
    99+
    2022-11-13
  • vue实现全选组件封装实例详解
    效果  封装的组件 <template> <el-form-item :label="label"> <el-checkbox ...
    99+
    2022-11-13
  • React hook实现简单的websocket封装方式
    目录React hook实现websocket封装react自定义hook解决websocket连接,useWebSocket1、描述2、代码React hook实现websocke...
    99+
    2022-11-13
  • vue-echarts如何实现图表组件封装详解
    目录背景:有哪些工具?怎么封装?总结背景: 需要大量使用图表的项目,为了提升开发效率,可以对图表类进行封装成组件,方便页面的搭建,也能进行统一管理维护,即使后面系统风格需要调整,调整...
    99+
    2022-11-13
  • Vue封装数字框组件实现流程详解
    目录数量选择组件-基本结构数量选择组件-v-model语法糖数量选择组件-功能实现数量选择组件-基本结构 (1)准备基本结构 <script lang="ts" setup n...
    99+
    2023-05-16
    Vue封装数字框组件 Vue数字输入框
  • Vue使用Swiper封装轮播图组件的方法详解
    目录Swiper为什么要封装组件开始封装1.下载安装Swiper2.引入css样式文件3.引入js文件4.把官网使用方法中的HTML结构复制粘贴过来5.初始化Swiper自定义效果完...
    99+
    2022-11-13
  • Vue封装通过API调用的组件的方法详解
    目录前言封装通过API调用的组件的设计思路封装组件的方式单例模式定义单例模式的优缺点1、优点2、缺点单例模式适用场景使用API调用组件的示例拓展:父子组件通信最后前言 在前端开发中,...
    99+
    2022-12-26
    前端vue封装api然后调用 vue api封装 vue中组件封装
  • JavaScript封装axios的实现详解
    目录摘要1.post方法2.create方法3.拦截器4.代码摘要 在vue中,我们调用接口使用的都是axios,使用之前我们也会进行一定的封装,然后再进行使用。 在这里,我们主要说...
    99+
    2022-11-13
  • JS样式获取的封装方法实例详解
    样式获取 style属性 只能获取标签内容style属性里面存在的一些样式 如果你需要获取对应的全局所有地方设置样式 我们就需要采用一些方法 getComputedStyle 方法属...
    99+
    2022-11-13
  • Vue登录功能实现全套详解(含封装axios)
    目录Vue项目中实现登录大致思路: 一、安装插件二、创建store 三、封装axiosapi.js的作用 四、路由拦截五、登录页面实际使用总结Vue项目...
    99+
    2022-12-28
    vue的登录功能的实现 vue怎么实现登录 vue实现用户登录
  • SpringBoot+WebSocket实现即时通讯的方法详解
    目录环境信息服务端实现导入依赖创建配置类创建一个注解式的端点并在其中通过配套注解声明回调方法服务端主动发送消息给客户端客户端实现Java客户端实现在前端环境(vue)中使用webso...
    99+
    2022-11-13
  • js实现封装jQuery的简单方法与链式操作详解
    目录1. 实现$(".box1").click( )方法 2. 实现$("div").click( )方法 3. 考虑$( )中参数的三种情况 4. 实现jq中的on方法 5. 实现...
    99+
    2022-11-11
  • php封装方法怎么实现
    这篇文章主要介绍了php封装方法怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php封装方法怎么实现文章都会有所收获,下面我们一起来看看吧。什么是封装方法?封装方法是一种将代码组织成一个单独的、可重复使...
    99+
    2023-07-05
  • SpringBoot接口返回结果封装方法实例详解
    rest接口会返回各种各样的数据,如果对接口的格式不加约束,很容易造成混乱。 在实际项目中,一般会把结果放在一个封装类中,封装类中包含http状态值,状态消息,以及实际的数据。这里主...
    99+
    2022-11-12
  • 详解spring封装hbase的代码实现
    前面我们讲了spring封装MongoDB的代码实现,这里我们讲一下spring封装Hbase的代码实现。hbase的简介:此处大概说一下,不是我们要讨论的重点。HBase是一个分布式的、面向列的开源数据库,HBase在Hadoop之上提供...
    99+
    2023-05-31
    spring hbase sprin
  • 详解SpringMVC 自动封装枚举类的方法
    springmvc默认无法自动封装枚举类,解决方法如下:枚举类public enum GoodsPromoteEnum { fine("精品",0), limit("限时购",1), cheap("特价",2); ...
    99+
    2023-05-31
    spring mvc 枚举
  • 原生AJAX封装的实现方法
    这篇文章主要介绍“原生AJAX封装的实现方法”,在日常操作中,相信很多人在原生AJAX封装的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”原生AJAX封装的实现方法”...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作