我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在Vue中使用WebScoket 会怎么样?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在Vue中使用WebScoket 会怎么样?

最近项目中使用到了webscoket,这个东西吧,用起来也很简单。

但是我发现,这个东西会因为网络的不稳定而断开连接,断开就断开吧,关键是断开了,webscoket不会出现异常。

于是就要自己去检测,这个有没有掉线。

我的想法是,每隔30秒向服务器发送信息,

每隔32秒去判断有没有收到消息,如果没有则判断为断开连接,进行重新连接。

因为我的技术能力还不是很强,所有代码在写法上有些不足,或许有些冗余,

但是功能的实现是没有问题的,

话不多说,上代码:

export default {
  data(){
    return {
      path:'',       // WebSocket的地址
      socket:'',     // WebSocket实例 
      times:0,       // 短线重新连接次数
      isConn:true,   // 配合次数进行自动重连
      heart:0,       // 接收定时器,用来检测WebScoket是否断线
      Tim:0,         // 用于判断是否接收消息的定时器
    }
  },
  mounted(){
    this.path = 'ws://82.157.123.54:9010/ajaxchattest'; // 测试地址,百度上可以搜索到
    //this.path = 'ws://' + window.location.hostname + '/devices/history'; // 获取浏览器当前地址,因为后台ip可能不固定,如果固定可以写死,就像上面那样,但是如果ip动态,则可以使用这个,上线使用
    this.Init(this.path); // 挂载时,初始化数据,建立连接等
  },
  methods: {
    Init(path){
      this.socket = new WebSocket(path); // 进行连接,连接的结果和状态在下面的onopen、onmessage、onclose
      let that = this; // 因为下面使用了普通函数,存在this指向问题,所以我就把vue的当前实例给that了,that的使用和this一样,就看成this就行

      this.socket.onopen = function() {  
        console.log("WebScoket已经成功连接!"); 
        this.heart = setInterval(()=>{ that.socket.send('hello')},1000*30); // 每隔30秒就向服务器发送消息
        that.times = 0; // 在连接成功的时候改变成初始状态,如果重连就会增加
        that.isConn = true; // 同上,与上面的次数共同控制是否重连,我不可能一直尝试重连,连接几百次吧
      };

      this.socket.onmessage = function() { // 接收消息,触发此回调
        console.log("接收到的消息为:hello");
        if(that.Tim){ // 初始值为0,也就是false,第一次不会执行清理定时器
          clearTimeout(that.Tim);
        }
        that.Tim = setTimeout(()=>{ that.socket.onclose=()=>{ that.socket.close() }; },1000*33) // 只要接收到消息就会创建一个定时器,定时器的内容是在33秒后关闭webscoket,但是如果在该时间内接收到消息,那么就会再次执行,会进入上面的if,
      }; 

      this.socket.onclose = function() {
        console.log("WebScoket已经断开连接");
        if(this.heart !== 0){ 
          clearInterval(this.heart)
        }
        if(that.times < 5 && that.isConn){ // 每隔5秒就会重新连接,未连接成功就会次数增加,连接成功就会清零
          that.isConn = false; // 在定时器结束前,不允许再次执行该函数,这里应该可以优化
          setTimeout(function(){ 
            that.times ++;
            console.log(`尝试第${that.times}次重连!`)
            that.isConn = true;
            that.Init(that.path) // 执行尝试重新连接
          },5000)
        }else{
          this.isConn = false; // 貌似可以优化
          this.socket.close(); // 彻底关闭
        }
      };

      this.socket.onerror = function() { // 这个删了也不会报错
        console.log('WebSocket连接发生异常!');
  
      };      
    },
}
}

逻辑其实很简单,就是有一点绕,声明的变量稍微有点多,看懂了还是很简单,

这些变量就像是一堆水龙头,它是否放水,得要判断,并且在不同的时候,给它不同的值。

如果不想搞懂也可以直接拿来用,关于时间地址改改就能用!

测试的话,需要在vue文件里面写,打开控制台,然后断网联网模拟真实情况,就可以调试了

结果:

(报错是因为我手动开关了wifi,尝试重连没有问题,最后稳定连接,对接收消息判断,也没有问题!)

到此这篇关于在Vue中使用WebScoket 的文章就介绍到这了,更多相关Vue使用WebScoket 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

在Vue中使用WebScoket 会怎么样?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue中怎样使用bimface

本篇文章给大家分享的是有关vue中怎样使用bimface,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. 安装 vue 脚手架这里还是使用 Vue CLI通过如下命令,全局安
2023-06-22

怎么在Vue中使用Element

这篇文章将为大家详细讲解有关怎么在Vue中使用Element,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、开发所需的软件环境有别于之前的Asp.net的开发,纯前端的开发,一般不会再采用
2023-06-15

怎么在Vue中使用protobuf

本篇内容主要讲解“怎么在Vue中使用protobuf”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Vue中使用protobuf”吧!protobuf是由google推出的和语言无关和平台无
2023-06-29

怎样在Linux中使用Shell脚本终止用户会话

怎样在Linux中使用Shell脚本终止用户会话,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。终止所有用户会话下面的shell脚本将通过获取用户会话的tty值来终止所有用户
2023-06-15

slot-scope怎么在Vue中使用

slot-scope怎么在Vue中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
2023-06-14

怎么在vue中使用umy-ui

这篇文章给大家分享的是有关怎么在vue中使用umy-ui的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。vue是什么Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它大型框架的区别是,使用V
2023-06-14

怎样在Idea中使用Git

怎样在Idea中使用Git,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。IDEA同步远程分支信息在Idea视图中GIT的分支信息在右下角,如果我们在remote新建了分支,
2023-06-19

怎么在vue中使用 Watch和Computed

本篇文章给大家分享的是有关怎么在vue中使用 Watch和Computed,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。01. 监听器watch(1)作用watch:用于监听d
2023-06-15

怎么在Vue项目中使用mock.js

这篇文章主要讲解了“怎么在Vue项目中使用mock.js”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Vue项目中使用mock.js”吧!在Vue项目中使用mock.js开发工具选择:
2023-06-27

graphQL怎么在前端vue中使用

这篇文章主要介绍“graphQL怎么在前端vue中使用”,在日常操作中,相信很多人在graphQL怎么在前端vue中使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”graphQL怎么在前端vue中使用”的疑
2023-07-05

dataV大屏在vue中怎么使用

这篇文章主要介绍“dataV大屏在vue中怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“dataV大屏在vue中怎么使用”文章能帮助大家解决问题。一、dataV可以实现什么效果?答:各种图表
2023-06-30

处理异常时,在catch中return会怎么样?

在实际操作中,还有一个很有意思的小问题,在try-catch-finally,如果catch中return了,还会执行finally吗答案是:会的,因为finally的作用就是处理善后,但是是在return前执行public class a
2023-06-02

手机使用云服务器会怎么样

使用云服务器可以让手机用户获得更好的数据存储和处理能力,同时也可以提高数据的安全性和可靠性。以下是具体的优点:1.数据存储和处理能力云服务器可以提供更大的存储空间和更强的计算能力,这意味着用户可以存储更多的数据和处理更复杂的任务。例如,用户可以将照片、视频和其他文件存储在云服务器上,而不必担心手机存储空间不足的问题。此外,云服务器还可以提供更快的数据传输速度,这意味着用户可以更快地上传和下载
2023-10-26

vue-cli3在main.js中console.log()会报错怎么解决

这篇文章主要讲解了“vue-cli3在main.js中console.log()会报错怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue-cli3在main.js中console.
2023-06-30

keep-alive组件怎么在Vue中使用

这篇文章将为大家详细讲解有关keep-alive组件怎么在Vue中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 一、keep-alive 用法< keep-alive> 包裹动态组件时
2023-06-14

怎样在ASP.NET Core中使用HttpClientFactory

本篇内容主要讲解“怎样在ASP.NET Core中使用HttpClientFactory”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎样在ASP.NET Core中使用HttpClientFa
2023-06-14

在laravel 5.6 中怎样使用swagger

这篇文章主要介绍在laravel 5.6 中怎样使用swagger,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Laravel 是什么Laravel 是一套简洁、优雅的PHP Web开发框架。它可以让你从面条一样杂乱
2023-06-06

编程热搜

目录