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

  • 微信一码通不是本人怎么改

    微信一码通不是本人怎么改

  • 全选复制快捷键ctrl加什么(全选复制快捷键是什么)

    全选复制快捷键ctrl加什么(全选复制快捷键是什么)

  • 红米k40pro支持DC调光(红米k40pro支持多少w快充)

    红米k40pro支持DC调光(红米k40pro支持多少w快充)

  • vivo手机怎么自定义水印(vivo手机怎么自定义铃声)

    vivo手机怎么自定义水印(vivo手机怎么自定义铃声)

  • b站解绑手机号(b站解绑手机号要多久)

    b站解绑手机号(b站解绑手机号要多久)

  • 怎么下载火山小视频(怎么下载火山小号)

    怎么下载火山小视频(怎么下载火山小号)

  • 华为p30pro指纹解锁不灵敏(华为P30pro指纹解锁丢失怎办)

    华为p30pro指纹解锁不灵敏(华为P30pro指纹解锁丢失怎办)

  • 耳机左右声道的区别(耳机左右声道的音量是一样的吗?)

    耳机左右声道的区别(耳机左右声道的音量是一样的吗?)

  • 微信签名为什么改不了(微信签名为什么只能写30个字)

    微信签名为什么改不了(微信签名为什么只能写30个字)

  • 美版和国行的区别(美版和国行的区别pencil)

    美版和国行的区别(美版和国行的区别pencil)

  • 无能效等级是什么意思(无能效等级是不是不好)

    无能效等级是什么意思(无能效等级是不是不好)

  • 苹果8p能升级ios13.3吗(苹果8p能升级ios16吗)

    苹果8p能升级ios13.3吗(苹果8p能升级ios16吗)

  • a55主板配什么显卡(a55m主板配什么显卡)

    a55主板配什么显卡(a55m主板配什么显卡)

  • 小米手机sn码是几位数(小米手机SN码是几位)

    小米手机sn码是几位数(小米手机SN码是几位)

  • vivo高德地图怎么横屏(vivo高德地图怎么录制自己的声音)

    vivo高德地图怎么横屏(vivo高德地图怎么录制自己的声音)

  • 荣耀MagicBook 15的摄像头在哪(荣耀magicbook15的usb接口)

    荣耀MagicBook 15的摄像头在哪(荣耀magicbook15的usb接口)

  • 拼多多的猪怎么去掉(拼多多上的猪怎么去掉)

    拼多多的猪怎么去掉(拼多多上的猪怎么去掉)

  • 华为l22是什么型号(华为kii-l22是什么型号)

    华为l22是什么型号(华为kii-l22是什么型号)

  • 联联周边游订单怎么退(联联周边游订单没有退款选项)

    联联周边游订单怎么退(联联周边游订单没有退款选项)

  • 充电宝归还了为什么还显示在使用(充电宝归还了为什么还扣了99)

    充电宝归还了为什么还显示在使用(充电宝归还了为什么还扣了99)

  • 华为p30快充设置(华为p30如何设置快充模式)

    华为p30快充设置(华为p30如何设置快充模式)

  • 抖音怎么和火山绑定(抖音怎么和火山绑定实名认证)

    抖音怎么和火山绑定(抖音怎么和火山绑定实名认证)

  • 如何查看和刷新DNS缓存(怎么查看当前刷新率)

    如何查看和刷新DNS缓存(怎么查看当前刷新率)

  • NovelAi + Webui + Stable-diffusion本地配置

    NovelAi + Webui + Stable-diffusion本地配置

  • 【深度学习】Pytorch实现CIFAR10图像分类任务测试集准确率达95%

    【深度学习】Pytorch实现CIFAR10图像分类任务测试集准确率达95%

  • autoreconf命令  更新已经生成的配置文件(autoreconf -ivf)

    autoreconf命令 更新已经生成的配置文件(autoreconf -ivf)

  • 个体户交税和个人所得税
  • 多缴纳了印花税有什么影响
  • 不在经营范围内开票会受到什么惩罚
  • 出资款在现金流中怎么体现
  • 发票开票人是管理员可以吗
  • 采用托收承付方式怎么做分录?
  • 收回已确认的坏账的应收账款
  • 预收帐款一直挂账好吗
  • 营业外支出计入
  • 计提结转本月城建税怎么做账?
  • 企业买茶叶如何账务处理
  • 进项税小于销项税怎么处理
  • 房地产企业预收款什么时候确认收入
  • 固定资产提前报废
  • 本期免税收入是什么
  • 企业实缴出资额怎么查
  • 小规模增值税附加税
  • 普通发票也属于增值税发票吗
  • 营改增之前的增值税
  • 土地转让应交税费
  • 开发企业土地使用税计算方法
  • win10ie浏览器没有internet选项
  • 住房公积金扣除标准为每月
  • php常用的开发工具
  • 电脑连上WiFi上不了网怎么办?
  • linux基本命令有哪些
  • 字典树python
  • PHP:disk_total_space()的用法_Filesystem函数
  • django-cors-headers
  • laravel注入
  • yii2组件的理解
  • 发票已开,款未到的会计分录
  • 会计如何分录
  • 对公户怎么取备用金
  • 勘察测绘公司是做什么的
  • vue使用技巧
  • rm 删除某个文件
  • 经营性现金流减利息
  • mysql表设计原则
  • 第一季度利润表年初余额
  • 免税农产品有哪些类型
  • 投资现金流负值表示什么
  • 个人所得税计算方法及抵扣方法
  • sql server 18486
  • 个体工商户纳税人类型怎么填
  • 行政单位应缴预算款原则上按月缴清
  • 固定资产计提折旧的账务处理
  • 利润表研发费用和管理费用
  • 研究费用怎么做账
  • 工地上报销项目有哪些
  • 税控盘年费每年都可以抵扣吗
  • 政府征税再进行补贴对消费者福利的影响
  • 企业代理社保
  • 不动产什么时候取得所有权
  • 销售收入包含哪些费用
  • 贷款买车成功后,给客户什么手续
  • 餐饮行业的原材料怎么做账
  • 进入四大会计师事务所怎么样
  • 债权人接受债务人土地抵押,还会被其他债权人查封?
  • sql server怎么创建表语句
  • 简单谈谈设计与市场的关系
  • xp系统安装程序没反应
  • 笔记本没有光驱怎么加装固态硬盘
  • xp系统优化软件哪个好
  • grep的结果 再次查找
  • 深入理解新发展理念心得体会3篇
  • 经过整理的一些成语
  • python selenium原理
  • 机械革命系统重装官方教程
  • glGenTextures(GLsizei n, GLuint *textures)函数说明
  • linux查看so中的函数
  • mysql命令备份数据库
  • javascript如何
  • unity2020怎么导入资源
  • 主机端口扫描程序设计python
  • 出租车票据国税怎么开
  • 医保预交金可以取出来吗
  • 河南省地方税务局公告2017年第4号
  • 潍坊购房政策2020
  • 江西公积金提取代办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设