这套代码可以拿过去直接用 一些注意我会在下面代码中加上注释:

谢谢支持

核心代码

 //这里需要引入vuex
import store from './store'; let wsConnection = {
$ws: null,
lockReturn: false,
timeout: 60 * 1000 * 5,
timeoutObj: null,
timeoutNum: null,
serverTimeoutObj: null,
//初始化webSocket长连接
initWebSocket: function () {
let corpId = localStorage.getItem('corpId');
let name = localStorage.getItem('username');
this.$ws = new WebSocket(wsurl);//写入地址 这里的地址可以在initWebSocket方法加入参数
this.$ws.onopen = this.wsOpen;
this.$ws.onclose = this.wsClose;
this.$ws.onmessage = this.wsMsg;
this.$ws.onerror = this.wsError;
},
//打开websocket
wsOpen: function (e) {
//开始websocket心跳
wsConnection.startWsHeartbeat();
console.log('ws success')
},
wsClose: function (e) {
console.log(e, 'ws close')
},
wsMsg: function (msg) {
//每次接收到服务端消息后 重置websocket心跳
wsConnection.resetHeartbeat();
//服务端发送来的消息存到vuex
store.commit('web_socket_msg', msg)
},
wsError: function (err) {
console.log(err, 'ws error');
wsConnection.reconnect()
},
//重启websocket
reconnect: function () {
let _this = this;
if (_this.lockReturn) {
return;
}
_this.lockReturn = true;
_this.timeoutNum && clearTimeout(_this.timeoutNum);
_this.timeoutNum = setTimeout(function () {
_this.initWebSocket();
_this.lockReturn = false;
}, 3000);
},
startWsHeartbeat: function () {
let _this = this;
_this.timeoutObj && clearTimeout(_this.timeoutObj);
_this.serverTimeoutObj && clearTimeout(_this.serverTimeoutObj);
_this.timeoutObj = setInterval(function () {
//判断websocket当前状态
if (_this.$ws.readyState != 1) {
_this.reconnect()
}
}, _this.timeout);
},
//重置websocket心跳
resetHeartbeat: function () {
let _this = this;
clearTimeout(_this.timeoutObj);
clearTimeout(_this.serverTimeoutObj);
_this.startWsHeartbeat()
}
}; //抛出websocket对象
export default wsConnection

websocket方法调用

 //在main.js引入
import wsConnection from './vuex/wsStore'
//挂载vue原型链
Vue.prototype.$setWs = wsConnection; //在使用地方调用
$this.$setWs.initWebSocket(); //在需要使用服务端推送过来的消息时
//在computed方法声明
getWsMsg() {
//在核心代码接收到的服务端信息存储到vuex的属性
return this.$store.state.webSocketMsg
}
//在watch方法 监听 getWsMsg
getWsMsg: function (data, val) {
console.log(data);
//.......
}

此代码为本博主原创,转载请注明出处(支持原创! 谢谢~)

凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~

凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~

凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~

凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~

凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~凑字数~

vue使用 封装websocket心跳包的更多相关文章

  1. webSocket使用心跳包实现断线重连

    首先new一个webscoket的连接 let noticeSocketLink = new WebSocket(‘webSocket的地址’) 这里是连接成功之后的操作 linkNoticeWebs ...

  2. 初探和实现websocket心跳重连

    心跳重连缘由 在使用websocket过程中,可能会出现网络断开的情况,比如信号不好,或者网络临时性关闭,这时候websocket的连接已经断开, 而浏览器不会执行websocket 的 onclos ...

  3. 理解WebSocket心跳及重连机制(五)

    理解WebSocket心跳及重连机制 在使用websocket的过程中,有时候会遇到网络断开的情况,但是在网络断开的时候服务器端并没有触发onclose的事件.这样会有:服务器会继续向客户端发送多余的 ...

  4. 初探和实现websocket心跳重连(npm: websocket-heartbeat-js)

    提示:文章最下方有仓库地址 心跳重连缘由 websocket是前后端交互的长连接,前后端也都可能因为一些情况导致连接失效并且相互之间没有反馈提醒.因此为了保证连接的可持续性和稳定性,websocket ...

  5. 封装WebSocket(建立链接、主动关闭)

    一.前言 近期项目里需做一个在线聊天功能,就想要在对话的时候建立socket链接.又因为聊天只是其中一个部分,在它外面还有一些全局的消息通知需要接收,因此也需要建立socket链接.在该项目里不仅一处 ...

  6. websocket心跳重连 websocket-heartbeat-js

    初探和实现websocket心跳重连(npm: websocket-heartbeat-js) 心跳重连缘由 websocket是前后端交互的长连接,前后端也都可能因为一些情况导致连接失效并且相互之间 ...

  7. web socket 心跳包的实现方案

    web socket 心跳包的实现方案05/30/2010 现在网络环境错综复杂,socket心跳包是获得健康强壮的连接的有效解决方案,今天,我们就在web socket中实现心跳包方案,是的,尽管我 ...

  8. service里设置websocket心跳并向fragment发送数据

    垃圾小白写了自己看的 /** * service 文件 */ public class SocketService extends Service { //自己定义接口用来传参 private sta ...

  9. vue项目使用websocket做聊天项目总结

    一.首先我们先了解一下websocket的使用: 1.创建websocket const ws = new WebSocket("ws://192.168.31.136:9998/ws&qu ...

随机推荐

  1. jsp学习:jsp学习阶段性总结2019.9.21

    Jsp学习 jsp语法格式: 脚本程序:<% 代码片段 %> jsp声明:<%! declaration; [ declaration; ]+ ... %> 表达式:<% ...

  2. shell编写一键启动

    #!/bin/bashAPP_NAME=bonade-uaac-service-0.0.1-SNAPSHOT.jarusage() { echo "Usage: sh 执行脚本.sh [st ...

  3. Linux(Centos7)yum安装最新mysql

    环境 CentOS 7.1 (64-bit system) MySQL 5.6.24 CentOS 安装 参考:http://www.waylau.com/centos-7-installation- ...

  4. Scala 系列(十三)—— 隐式转换和隐式参数

    一.隐式转换 1.1 使用隐式转换 隐式转换指的是以implicit关键字声明带有单个参数的转换函数,它将值从一种类型转换为另一种类型,以便使用之前类型所没有的功能.示例如下: // 普通人 clas ...

  5. PTA A1014

    A1014 Waiting in Line (30 分) 题目内容 Suppose a bank has N windows open for service. There is a yellow l ...

  6. 年年有余之java求余的技巧集合

    背景 传说里玉皇大帝派龙王马上降雨到共光一带,龙王接到玉皇大帝命令,立马从海上调水,跑去共光施云布雨,但粗心又着急的龙王不小心把海里的鲸鱼随着雨水一起降落在了共光,龙王怕玉皇大帝责怪,灵机一动便声称他 ...

  7. Docker学习之docker常用命令

    docker ps -a 表示所有容器 docker pull 获取image docker build 创建image docker run 运行container docker images 列出 ...

  8. pyhon 浅copy

    一般python的copy是没有用的, 但是让你熟悉浅copy给你举个清晰的例子 person = ["name",["money",100]] p1 = pe ...

  9. Python 为什么要保留显式的 self ?

    花下猫语:前两天,我偶然在一个知识星球(刘欣老师的"码农翻身")里看到一篇主题,刘老师表示 Python 的类方法非要带个 self,而不像其它语言那样隐藏起来,这让人很不爽.我对 ...

  10. Flume系列一之架构介绍和安装

    Flume架构介绍和安装 写在前面 在学习一门新的技术之前,我们得知道了解这个东西有什么用?我们可以使用它来做些什么呢?简单来说,flume是大数据日志分析中不能缺少的一个组件,既可以使用在流处理中, ...