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 相关文章推荐
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
Nov 10 Javascript
JS编程小常识很有用
Nov 26 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
Jun 24 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
JavaScript中的变量作用域介绍
Dec 31 Javascript
浅析$(function) ready和onload 的区别
Sep 03 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
Nov 26 Javascript
React实现点击删除列表中对应项
Jan 10 Javascript
实例解析js中try、catch、finally的执行规则
Feb 24 Javascript
setTimeout时间设置为0详细解析
Mar 13 Javascript
antd组件Upload实现自己上传的实现示例
Dec 18 Javascript
js实现图片推拉门效果代码实例
May 18 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部分常见问题总结
2006/10/09 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
2016/08/15 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
python解决字典中的值是列表问题的方法
2013/03/04 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
利用python汇总统计多张Excel
2020/09/22 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
什么是GWT的Module
2013/01/20 面试题
车工岗位职责
2013/11/26 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
销售员自我评价
2015/03/11 职场文书
党支部考察意见范文
2015/06/02 职场文书
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL