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 相关文章推荐
XP折叠菜单&amp;仿QQ2006菜单
Dec 16 Javascript
javascript 一个函数对同一元素的多个事件响应
Jul 25 Javascript
jQuery 扩展对input的一些操作方法
Oct 30 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
Feb 12 Javascript
JavaScript将数字转换成大写中文的方法
Mar 23 Javascript
利用jQuery中的ajax分页实现代码
Feb 25 Javascript
Angular2入门教程之模块和组件详解
May 28 Javascript
webpack3+React 的配置全解
Aug 21 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
Sep 25 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
Jan 31 Javascript
Vue无限滑动周选择日期的组件的示例代码
Jul 18 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
Sep 25 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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
javascript iframe编程相关代码
2009/12/28 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
Python获取任意xml节点值的方法
2015/05/05 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
python十进制转二进制的详解
2020/02/07 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
Python datetime模块使用方法小结
2020/06/18 Python
Python爬虫与反爬虫大战
2020/07/30 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
Python类型转换的魔术方法详解
2020/12/23 Python
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
简历自我评价怎么写呢?
2014/01/06 职场文书
2015年环保局工作总结
2015/05/22 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
导游词之吉林吉塔
2019/11/11 职场文书