Vue通过WebSocket建立长连接的实现代码


Posted in Javascript onNovember 05, 2019

使用场景:

在项目开发中,后端需要处理一连串的逻辑,或者等待第三方的数据返回来进行处理之后在返回给前端,可能时间会很长,而且前端也不知道后端什么时候能处理好(时间长的话会达到10分钟左右),如果采用普通的HTTP连接,前后端无法一直保持联系,麻烦的时候可能还需要采用轮询的机制,所以使用WebSocket连接效果还是比较好的。

使用时间:

在界面加载完之后,建上WebSocket连接,此时前端还可以发送普通的HTTP的请求,等到后端处理完之后,通过建立的WebSocket连接返给前端,前端根据返回的数据进行对应的操作。

代码展示:

<template>
</template>
<script>
export default {
 data() {
  return{
   // 用户Id
   userId:'',
   appid:'',
   // 事件类型
   type:'',
   msg:'',
   wsUrl:''
  }  
 },
 methods: {
  //初始化weosocket
  initWebSocket() {
   if (typeof WebSocket === "undefined") {
    alert("您的浏览器不支持WebSocket");
    return false;
   }
   const wsuri = 'ws://(后端WebSocket地址)/websocket/' + this.userId + '/' + this.appid // websocket地址
   this.websock = new WebSocket(wsuri);
   this.websock.onopen = this.websocketonopen;
   this.websock.onmessage = this.websocketonmessage;
   this.websock.onerror = this.websocketonerror;
   this.websock.onclose = this.websocketclose;
  },
  //连接成功
  websocketonopen() {
   console.log("WebSocket连接成功");
   // 添加心跳检测,每30秒发一次数据,防止连接断开(这跟服务器的设置有关,如果服务器没有设置每隔多长时间不发消息断开,可以不进行心跳设置)
   let self = this;
   this.timer = setInterval(() => {
    try {
     self.websock.send('test')
     console.log('发送消息');
    }catch(err){
     console.log('断开了:' + err);
     self.connection()
    }
   }, 30000)
  },
  //接收后端返回的数据,可以根据需要进行处理
  websocketonmessage(e) {
   var vm = this;
   let data1Json = JSON.parse(e.data);
   console.log(data1Json);
  },
  //连接建立失败重连
  websocketonerror(e) {
   console.log(`连接失败的信息:`, e);
   this.initWebSocket(); // 连接失败后尝试重新连接
  },
  //关闭连接
  websocketclose(e) {
   console.log("断开连接", e);
  }
 },
 created() {
  if (this.websock) {
   this.websock.close(); // 关闭websocket连接
  }
  this.initWebSocket();
 },
 destroyed() {
  //页面销毁时关闭ws连接
  if (this.websock) {
   this.websock.close(); // 关闭websocket
  }
 }
};
</script>

问题回顾:

在实际使用的时候遇到的问题:有的时候页面链接还没有建立上,但是后端已经把数据都处理好了,这个时候推给前端,前端接收不到。

解决方案:

1)简单的方法:让后端延迟几秒再推

优势:简单

劣势:降低了性能

2)优化之后的方法:使用Redis保存用户的登录状态,缓存这个用户的数据,等到建立连接之后再推,推完就清空Redis

总结

以上所述是小编给大家介绍的Vue通过WebSocket建立长连接的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript 装载iframe子页面,自适应高度
Mar 20 Javascript
JavaScript两种跨域技术全面介绍
Apr 16 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
Feb 03 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
jQuery插件版本冲突的处理方法分析
Jan 16 Javascript
JavaScript用200行代码制作打飞机小游戏实例
Jun 21 Javascript
JavaScript中各数制转换全面总结
Aug 21 Javascript
基于JSONP原理解析(推荐)
Dec 04 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
Dec 07 Javascript
vue-router+nginx 非根路径配置方法
Jun 30 Javascript
详解JavaScript中typeof与instanceof用法
Oct 24 Javascript
vue-router 控制路由权限的实现
Sep 24 Javascript
原生js实现随机点名功能
Nov 05 #Javascript
element-ui 文件上传修改文件名的方法示例
Nov 05 #Javascript
vue keep-alive 动态删除组件缓存的例子
Nov 04 #Javascript
javascript如何实现create方法
Nov 04 #Javascript
关于vue里页面的缓存详解
Nov 04 #Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
Nov 04 #Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
Nov 04 #Javascript
You might like
PHP SQLite类
2009/05/07 PHP
第五章 php数组操作
2011/12/30 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
微信小程序实现发微博功能的示例代码
2020/06/24 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
Python中的map、reduce和filter浅析
2014/04/26 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
在python3中实现更新界面
2020/02/21 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
python自动化发送邮件实例讲解
2021/01/04 Python
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
PHP引擎php.ini参数优化深入讲解
2021/03/24 PHP
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
Pygame Time时间控制的具体使用详解
2021/11/17 Python
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL