位置: IT常识 - 正文

【网络通信】websocket如何断线重连(网络通信的整个流程)

编辑:rootadmin
【网络通信】websocket如何断线重连 Vue<template> <div> <button @click="sendDevName('xxxxxxxx')">发送</button> {{data}} </div></template><script>export default { name: 'HelloWorld', data () { return { data: null } }, // html加载完成后执行initWebSocket()进行websocket初始化 mounted () { this.initWebSocket() }, // 离开该层时执行,划重点了!!! destroyed: function () { // 离开路由之后断开websocket连接 this.websock.close() }, methods: { // 初始化websocket initWebSocket () { const path = 'ws://xxx.xxx.xxx.xxx:端口号/xxxxx'// 后台给的websocket的ip地址 this.websock = new WebSocket(path) this.websock.onmessage = this.websocketOnMessage this.websock.onopen = this.websocketOnOpen this.websock.onerror = this.websocketOnError this.websock.onclose = this.websocketClose }, // 连接建立成功的信号 websocketOnOpen () { console.log('初始化成功')// 连接成功后就可以在这里写一些回调函数了 }, // 连接建立失败重连 websocketOnError () { // 如果报错的话,在这里就可以重新初始化websocket,这就是断线重连 this.initWebSocket() }, // 数据接收 websocketOnMessage (e) { console.log(e)// e这个变量就是后台传回的数据,在这个函数里面可以进行处理传回的值 this.data = e// 这边我绑定了一个data,data会在网页上显示后端传来的东西 }, // 数据发送 websocketSend (Data) { this.websock.send(Data)// Data变量就是你想对后台说些啥,根据后端给你的接口文档传值进行交互 }, // 关闭的信号 websocketClose () { console.log('断开连接') }, // 传参给后端,这里对websocketSend又进行了一层封装,用不到的可以删除 sendDevName (chooseDevice) { console.log(chooseDevice) this.websocketSend(chooseDevice) } }}</script>

推荐整理分享【网络通信】websocket如何断线重连(网络通信的整个流程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:http网络通信,网络通信百科,网络通信流程,网络通信教程,http网络通信,网络通信教程,网络通信入门,网络 通信,内容如对您有帮助,希望把文章链接给更多的朋友!

前端点击“发送”后端服务器就会接受到马赛克里面的东西 前端点击发送按钮触发websocketSend (Data)函数后端就会收到前端发的消息,根据前端传过来的消息再发送前端所需要的信息,前端一旦监听到有东西发过来就会触发websocketOnMessage (e)这个函数

websocket的状态

ebsocket的两个属性:readyState和bufferedAmount。 根据readyState属性可以判断webSocket的连接状态,该属性的值可以是下面几种: 0 :对应常量CONNECTING (numeric value 0), 正在建立连接连接,还没有完成。The connection has not yet been established. 1 :对应常量OPEN (numeric value 1), 连接成功建立,可以进行通信。The WebSocket connection is established and communication is possible. 2 :对应常量CLOSING (numeric value 2) 连接正在进行关闭握手,即将关闭。The connection is going through the closing handshake. 3 : 对应常量CLOSED (numeric value 3) 连接已经关闭或者根本没有建立。The connection has been closed or could not be opened. 例: var socket = new WebSocket(url); if(socket.readyState!=1){ alert(“未连接。”); return; } 根据bufferedAmount可以知道有多少字节的数据等待发送,若websocket已经调用了close方法则该属性将一直增长。

Js

首先我们要熟悉如下几个api

【网络通信】websocket如何断线重连(网络通信的整个流程)

1、连接websocket的服务器的websocekt函数

2、websocekt断开后触发的onclose函数

由上面这两个函数就可以了,大致思路梳理一下:

1、首先开发一个函数websocketinit,函数主要是websocket的连接逻辑,监听信息,发送信息

2、监听onclose事件,onclose触发后重新执行websocketinit事件

思路有了大致代码如下:

function webSocketInit(service){ //1、初始化ws //2、监听onclose事件 重新执行websocketInit函数 }

具体代码如下:

//1.创建websocket客户端var host = window.location.host; #IPvar ut = "{{ ut }}";var wsServer = 'wss://' + host + '/notify/wxlogin?ut=' + ut;var timeConnect = 0;webSocketInit(wsServer);//socket初始化function webSocketInit(service) { var ws = new WebSocket(service); ws.onopen = function () { console.log("已连接TCP服务器"); ws.send('Hello WebSockets!'); }; ws.onmessage = function (evt) { console.log('Received Message: ' + evt.data); data = JSON.parse(evt.data); console.log(data); if (data.status != 0) { alert("扫码错误"); ws.close(); } if (data.data.wx_login == 1) { //window.location.href = "http://" + host + "/admin" window.location.href = "/admin" } if (data.data.wx_login == 0) { //alert(data.data.message) $(".qr_code").css("display", "none"); $(".tips").text(data.data.message) } console.log(data.data); }; ws.onclose = function () { console.log('服务器已经断开'); reconnect(service); };}// 重连function reconnect(service) { // lockReconnect加锁,防止onclose、onerror两次重连 timeConnect++; console.log("第" + timeConnect + "次重连"); // 进行重连 setTimeout(function () { webSocketInit(service); }, 1000);}// 心跳 * 回应setInterval(function () { var websocket = new WebSocket(wsServer); websocket.send('');}, 1000 * 100)来源

vue实现websocket断线重连 websocket断线重连的方法

本文链接地址:https://www.jiuchutong.com/zhishi/287104.html 转载请保留说明!

上一篇:vue3使用vueup/vue-quill富文本、并限制输入字数

下一篇:阿卡迪亚国家公园的高丛蓝莓植物,缅因州 (© Danita Delimont/Gallo Images/Getty Images Plus)(阿卡迪亚国家公园景点)

  • 淘宝店铺如何做推广 迅速成为淘宝皇冠店铺(淘宝店铺如何做账)

    淘宝店铺如何做推广 迅速成为淘宝皇冠店铺(淘宝店铺如何做账)

  • vivox30网速卡的原因(vivox30网速慢)

    vivox30网速卡的原因(vivox30网速慢)

  • 小米10青春和小米10区别(小米10青春和小米11青春)

    小米10青春和小米10区别(小米10青春和小米11青春)

  • word有查重功能吗(word查重功能在哪里)

    word有查重功能吗(word查重功能在哪里)

  • 支付宝地区怎么修改(支付宝地区怎么隐藏)

    支付宝地区怎么修改(支付宝地区怎么隐藏)

  • opporeno2呼吸灯在哪里(opporeno6呼吸灯)

    opporeno2呼吸灯在哪里(opporeno6呼吸灯)

  • 手机抖音无法拍摄(手机抖音拍不了是怎么回事)

    手机抖音无法拍摄(手机抖音拍不了是怎么回事)

  • ipad7代叫什么(ipad7代是ipad2019吗)

    ipad7代叫什么(ipad7代是ipad2019吗)

  • 闲鱼中打包是什么意思(闲鱼卖家怎么打包)

    闲鱼中打包是什么意思(闲鱼卖家怎么打包)

  • iphone11黑屏转圈(iphone11黑屏转圈不能重启)

    iphone11黑屏转圈(iphone11黑屏转圈不能重启)

  • 腾讯视频怎么下载电视剧到手机(腾讯视频怎么下载)

    腾讯视频怎么下载电视剧到手机(腾讯视频怎么下载)

  • ps改变图片大小快捷键(ps改变图片大小后图片模糊怎么处理)

    ps改变图片大小快捷键(ps改变图片大小后图片模糊怎么处理)

  • b站上传视频审核要多久(b站上传视频不过审)

    b站上传视频审核要多久(b站上传视频不过审)

  • vivoy5s是什么处理器(这个手机是vivo y5s吗?)

    vivoy5s是什么处理器(这个手机是vivo y5s吗?)

  • 电脑上下一行按哪个键(电脑上下一行按那个键)

    电脑上下一行按哪个键(电脑上下一行按那个键)

  • vivo手机sos怎么关闭(vivo手机里sos在哪儿找)

    vivo手机sos怎么关闭(vivo手机里sos在哪儿找)

  • vivo分辨率在哪里设置(vivo调分辨率在哪调)

    vivo分辨率在哪里设置(vivo调分辨率在哪调)

  • 高德地图如何标记(高德地图如何标记多个位置并标注)

    高德地图如何标记(高德地图如何标记多个位置并标注)

  • ipadpro11电池容量多大(ipad pro 11 2021电池容量)

    ipadpro11电池容量多大(ipad pro 11 2021电池容量)

  • qq被恶意举报怎么办(qq被恶意举报怎么反击)

    qq被恶意举报怎么办(qq被恶意举报怎么反击)

  • 苹果xr是塑料外壳吗(iphone xr是塑料机身吗)

    苹果xr是塑料外壳吗(iphone xr是塑料机身吗)

  • 后端返回PDF文件流,前端处理展示及打印(补:PDF多页不显示问题)(后端返回pdf文件地址,前端怎么渲染到页面)

    后端返回PDF文件流,前端处理展示及打印(补:PDF多页不显示问题)(后端返回pdf文件地址,前端怎么渲染到页面)

  • 部分被雪覆盖的Val Cervara山坡上的老山毛榉林,意大利蒙帕赛诺 (© Bruno D'Amicis/Minden Pictures)(被雪覆盖的山峰)

    部分被雪覆盖的Val Cervara山坡上的老山毛榉林,意大利蒙帕赛诺 (© Bruno D'Amicis/Minden Pictures)(被雪覆盖的山峰)

  • 深度学习——VGG16模型详解

    深度学习——VGG16模型详解

  • 增值税专用发票的税率是多少啊
  • 食堂辅助帐怎么记帐
  • 查账征收的个体户怎么报税
  • 行政单位会议纪要范文3篇
  • 工业企业库存商品的初始入账成本
  • 企业购买硬件与软件该如何做账?
  • 买入返售金融资产什么意思
  • 开专票还需要提供营业执照?
  • 建筑企业差额征收
  • 外经证预交增值税和专管员
  • 公益性捐赠公告
  • 个税多申报了实发没有这么多,如何处理
  • 替票是什么和发票的区别
  • 投资性房地产转为存货
  • 固定资产上的配件经常更换
  • 价内税与价外税名词解释
  • 公司注销的时候注册资金都没交可以吗?
  • 向投资者分配现金股利会计分录?
  • 暂估入库怎么处理
  • 挂社保不发工资
  • 厂商退货款差额怎么算
  • 专柜公司货什么意思
  • 第36届大众电影百花奖直播回放
  • 赔偿材料做什么分录
  • 其他应付款与应付款的区别
  • springboot整合了哪些框架
  • PHP:pg_copy_from()的用法_PostgreSQL函数
  • 农村土地承包经营权证丢失怎么补办
  • 差旅费的会计分录怎么做
  • 职工薪酬纳税调整明细表案例
  • css去掉项目符号
  • php db2
  • 设置背景图片大小和元素的大小一致的代码
  • tar压缩解压缩命令
  • java幂等性是什么
  • 授渔计划是什么意思
  • php怎么变成txt
  • 使用groupadd命令创建用户组
  • 住宿专票可以抵增值税吗
  • 代垫运费增值税计入销项税额吗
  • 利息收入的会计科目怎么做
  • mysql中用户和权限的作用
  • 企业资本包括
  • 应发工资包含
  • 在SQL Server中使用存储过程的优点包括
  • mysql两个数据库连接查询
  • 申报错误后处理有影响吗
  • 自产产品用于业务招待
  • 去年少交的增值税可以和今年的合并吗
  • 因员工过失造成的工伤用不用赔
  • 物业公司代收代付租金要开发票吗
  • 成本利润率多少是正常的
  • 什么情况下需要割包皮
  • 雇主责任险为什么理赔很慢
  • 税控盘交服务费
  • 慈善捐款流程
  • 开具销项负数发票会计分录
  • mysql通过find_in_set()函数实现where in()顺序排序
  • mybatis怎么搭建
  • win10预览版和正式版区别
  • windows8开机蓝屏
  • Win7自带的扫雷怎么都打不开
  • win10开机cpu占用率100%
  • win10应用商店更新软件更新不了
  • 在mac中运行exe
  • win8启动设置选哪个
  • win7系统无法更改账户名称
  • android环境搭建教程
  • shell随机
  • unity onbecameinvisible
  • html中如何写java代码
  • 最常见的左向右分流型心脏病是
  • 安卓自定义ui
  • Node.js中的http请求客户端示例(request client)
  • NGUI之UIRoot
  • javascript简介和语法
  • java 调试
  • 安卓判断横竖屏
  • jquery设计模式
  • 贵州省税务网上缴费平台
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设