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 相关文章推荐
Jquery乱码的一次解决过程 图解教程
Feb 20 Javascript
jQuery数组处理方法汇总
Jun 20 Javascript
setInterval与clearInterval的使用示例代码
Jan 28 Javascript
JS实现页面超时后自动跳转到登陆页面
Jan 19 Javascript
jQuery匹配文档链接并添加class的方法
Jun 26 Javascript
jQuery树形控件zTree使用小结
Aug 02 Javascript
JavaScript队列的应用实例详解【经典数据结构】
Apr 12 Javascript
慕课网题目之js实现抽奖系统功能
Sep 19 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
Mar 19 Javascript
JS+CSS实现随机点名(实例代码)
Nov 04 Javascript
vue 取出v-for循环中的index值实例
Nov 09 Javascript
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
原生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,ajax实现分页
2008/03/27 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
Django中URLconf和include()的协同工作方法
2015/07/20 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
python实现人工蜂群算法
2020/09/18 Python
后勤主管工作职责
2013/12/07 职场文书
企业内控岗位的职责
2014/02/07 职场文书
平安校园建设方案
2014/05/02 职场文书
团队拓展活动方案
2014/08/28 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
交通安全月活动总结
2015/05/08 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫