位置: 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)(阿卡迪亚国家公园景点)

  • iqoo怎么关闭开发者模式(iqoo怎么关闭开机声音)

    iqoo怎么关闭开发者模式(iqoo怎么关闭开机声音)

  • steam如何隐藏自己的游戏动态(steam如何隐藏自己在线)

    steam如何隐藏自己的游戏动态(steam如何隐藏自己在线)

  • 抖音浏览别人会有记录吗(抖音浏览别人会被留下吗)

    抖音浏览别人会有记录吗(抖音浏览别人会被留下吗)

  • qq异常登录(qq异常登录提醒哪里打开)

    qq异常登录(qq异常登录提醒哪里打开)

  • word怎么删除尾注(word怎么删除尾注导致的回车)

    word怎么删除尾注(word怎么删除尾注导致的回车)

  • 手机键盘没有回车键怎么办(手机键盘没有回车键怎么设置)

    手机键盘没有回车键怎么办(手机键盘没有回车键怎么设置)

  • 保修期内苹果电池损耗多少可以免费更换(保修期内苹果电脑进水维修多少钱)

    保修期内苹果电池损耗多少可以免费更换(保修期内苹果电脑进水维修多少钱)

  • 耳机进洗衣机还能用吗(耳机进洗衣机了还有救么)

    耳机进洗衣机还能用吗(耳机进洗衣机了还有救么)

  • 为什么无故收到验证码(为什么无故收到银行验证码)

    为什么无故收到验证码(为什么无故收到银行验证码)

  • 手机注销了微信号还能用吗(手机注销了微信号密码忘了怎么办)

    手机注销了微信号还能用吗(手机注销了微信号密码忘了怎么办)

  • b站视频怎么下载到本地(b站视频怎么下载到手机本地)

    b站视频怎么下载到本地(b站视频怎么下载到手机本地)

  • 闲鱼拉黑别人会怎么样(闲鱼拉黑了别人,他还能看见我的主啊)

    闲鱼拉黑别人会怎么样(闲鱼拉黑了别人,他还能看见我的主啊)

  • 怎么设置微信进账提醒(怎么设置微信进入服务需要密码)

    怎么设置微信进账提醒(怎么设置微信进入服务需要密码)

  • 海思kirin980等于骁龙多少(海思kirin960好不好)

    海思kirin980等于骁龙多少(海思kirin960好不好)

  • iphone合约机能换卡吗(苹果合约机可以机卡分离吗)

    iphone合约机能换卡吗(苹果合约机可以机卡分离吗)

  • word文档数字间距怎么设置(word文档数字间隔太宽怎么办)

    word文档数字间距怎么设置(word文档数字间隔太宽怎么办)

  • vivos1有快充吗(vivos1有快充功能吗)

    vivos1有快充吗(vivos1有快充功能吗)

  • xsmax是不是双卡(xsmax美版可以改卡槽双卡吗)

    xsmax是不是双卡(xsmax美版可以改卡槽双卡吗)

  • 嘀嗒顺风车提现多久到账(嘀嗒顺风车提现到支付宝还是银行卡)

    嘀嗒顺风车提现多久到账(嘀嗒顺风车提现到支付宝还是银行卡)

  • 华为分屏功能怎么使用(华为分屏功能怎么使用视频)

    华为分屏功能怎么使用(华为分屏功能怎么使用视频)

  • 爱奇艺取消自动续费后还是会员吗(爱奇艺取消自动续费支付宝)

    爱奇艺取消自动续费后还是会员吗(爱奇艺取消自动续费支付宝)

  • 苹果备忘录有字数限制吗(苹果备忘录有字数显示吗)

    苹果备忘录有字数限制吗(苹果备忘录有字数显示吗)

  • 复制粘贴的朋友圈怎么不被折叠(复制粘贴的朋友圈文字怎么显示不全)

    复制粘贴的朋友圈怎么不被折叠(复制粘贴的朋友圈文字怎么显示不全)

  • 金税盘版开票软件怎么升级
  • 9个点的发票跟6个点区别
  • 对方只能开普票怎么办
  • 附加税减征额怎么做分录
  • 租车费属于办公费吗
  • 非正常户发票管理
  • 收到工伤赔偿款会计分录
  • 公允价值变动计入其他综合收益
  • 公司车买保险怎么付款
  • 商业用房怎么缴税
  • 增值税发票验证
  • 劳务派遣税收政策文件
  • 流转税通俗举例
  • 增值税普通发票和普通发票的区别怎么交税
  • 合伙企业分红是免税企业需要缴纳什么税
  • 缴纳海关进口增值税
  • 代扣代缴增值税可以抵扣进项税?
  • 跨年度的房租发票怎么做账
  • 飞机票可以直接去机场买吗
  • win11系统的电脑中拷贝到U盘中的文件没有了怎么解决
  • 广告传媒公司的成本是什么
  • 电脑搜狗输入法不见了怎么调出来
  • 银行借款利息支出计入什么科目
  • 单位房转卖
  • list.php
  • lumenrt
  • 小刺猬 (© lorenzo104/Getty Images)
  • 金融企业类型有哪些
  • php关闭错误报告
  • 房地产公司收房款怎么分录
  • CLIP(Contrastive Language-Image Pre-Training)简介
  • 视听结合的景物描写
  • php获取文件内容的方法
  • c语言 *指针
  • 交易性金融资产处置时的会计核算步骤
  • sql语句字符串比较大小
  • 非货币性资产交换和债务重组的区别
  • 固定资产改扩建和大修理的区别
  • 货物或应税劳务名称怎么填
  • 残疾人保障金需要联系专管员吗
  • 季度所得税申报怎么弥补以前年度亏损
  • 企业制造费用包括
  • 购进商品印花税怎么计算
  • 退货销售折让会计分录
  • 开具正数发票中如何体现扣款?
  • 土地使用权属于无形资产吗
  • 固定资产报废如何记账
  • 盘亏的固定资产是资产吗
  • 客户将发票丢了怎么赔偿
  • mysql格式化数值
  • MySQL索引背后的数据结构及算法原理
  • xp 修复
  • ubuntu桌面右键
  • win7共享在哪
  • window7发布
  • centos7 zsh
  • msoobe.exe是什么
  • win7网络问题
  • linux 中的MYSQL命令汇总 适合学习linux下配置mysql的朋友
  • debian怎么用
  • win10系统无法开机
  • windows10version20h2的03
  • perl 删除文件
  • cocos2dx入门
  • opengl es2.0
  • Android一分钟环境搭建,包含Mac、Linux、Windows
  • 苏州大学附属第一医院占地面积
  • python有没有翻译库
  • angularjs2
  • shell脚本遍历
  • 用python发邮件
  • [置顶]马粥街残酷史
  • Unity 管理www类访问的写法
  • javascript数据
  • 餐饮服务需要交印花税吗?
  • 贵州新农合可以打电话停保吗
  • 车船税缴费电子凭证
  • 银行存款利息收入现金流量表计入哪
  • 南昌高新税务局上班时间
  • 劳务报酬预缴税率表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设