js websocket断线重连
js websocket断开重连实例代码,请根据自己需求做出相应改动Vue中使用websocket
  $(function() {
	var lockReconnect = false;//避免重复连接
	var ws = null; //WebSocket的引用
	var wsUrl = "xxxxxx"; //这个要与后端提供的相同
	//创建WebSocket连接,如果不确定浏览器是否支持,可以使用socket.js做连接
	function createWebSocket(url){
		 try {
			 if ('WebSocket' in window) {
		        ws = new WebSocket("ws://" + url + "/socketServer");
		     } else {
		        ws = new SockJS("http://" + url + "/sockjs/socketServer");
		     }
	         initEventHandle();
	     } catch (e) {
	         reconnect(wsUrl);
	     }
	}
	function reconnect(url) {
        if(lockReconnect) return;
        lockReconnect = true;
        //没连接上会一直重连,设置延迟避免请求过多
        setTimeout(function () {
            createWebSocket(wsUrl);
            console.log("正在重连,当前时间"+new Date())
            lockReconnect = false;
        }, 5000); //这里设置重连间隔(ms)
    }
	 /*********************初始化开始**********************/
	function initEventHandle() {
		// 连接成功建立后响应
		ws.onopen = function() {
			console.log("成功连接到" + wsUrl);
			//心跳检测重置
			heartCheck.reset().start();
		}
		// 收到服务器消息后响应
		ws.onmessage = function(e) {
			//如果获取到消息,心跳检测重置
            //拿到任何消息都说明当前连接是正常的
            heartCheck.reset().start();
            //Json转换成Object
            var msg = eval('(' + e.data + ')');
            if(msg.message == "heartBeat"){
            	//忽略心跳的信息,因为只要有消息进来,断线重连就会重置不会触发
            }else{
            	//处理消息的业务逻辑
            }
        }
		// 连接关闭后响应
		ws.onclose = function() {
			console.log("关闭连接");
			reconnect(wsUrl);//重连
		}
		ws.onerror = function () {
			reconnect(wsUrl);//重连
		};
	}
	/***************初始化结束***********************/
	 //心跳检测
    var heartCheck = {
        timeout: 15000,//毫秒
        timeoutObj: null,
        serverTimeoutObj: null,
        reset: function(){
            clearTimeout(this.timeoutObj);
            clearTimeout(this.serverTimeoutObj);
            return this;
        },
        start: function(){
            var self = this;
            this.timeoutObj = setTimeout(function(){
                //这里发送一个心跳,后端收到后,返回一个心跳消息,
                //onmessage拿到返回的心跳就说明连接正常
                ws.send("HeartBeat");
                console.log("HeartBeat");
                self.serverTimeoutObj = setTimeout(function(){//如果超过一定时间还没重置,说明后端主动断开了
                    ws.close();//如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
                }, self.timeout)
            }, this.timeout)
        }
    }
// 发送字符串消息
	$("#sendBtn").click(function() {
		if (ws.readyState ==1) {
			//自定义消息串,让后端接收
			ws.send("xxxxxx");
		}else{
			alert("当前连接超时,请刷新重试!");
		}
		return false;
	});
	// 强制退出
	window.onunload = function() {
		ws.close();
	}
	createWebSocket(wsUrl);/**启动连接**/
});
https://www.cnblogs.com/hellxz/p/9166138.html
https://www.cnblogs.com/1wen/p/5808276.html
js websocket断线重连的更多相关文章
- 微信小程序使用原生WebSokcet实现断线重连及数据拼接
		
以前做小程序为了应急找了个插件去链接WebSokcet,文章传送门. 回过头在新项目中再次使用时出现了些许问题,不一一赘述.遂决定好好用一下原生的WebSokcet. 一.说明 1.小程序原生的Web ...
 - webSocket使用心跳包实现断线重连
		
首先new一个webscoket的连接 let noticeSocketLink = new WebSocket(‘webSocket的地址’) 这里是连接成功之后的操作 linkNoticeWebs ...
 - java-websocket客户端 断线重连 注入Service问题
		
java版客户端: 使用开源项目java-websocket, github地址: https://github.com/TooTallNate/Java-WebSocket github上有很多示例 ...
 - SignalR控制台自托管服务端向web客户端指定用户推送数据,客户端断线重连
		
一.前言 SignalR是微软推出的开源实时通信框架.其内部使用Web Socket, Server Sent Events 和 Long Polling作为底层传输方式,SignalR会根据客户端和 ...
 - websocket心跳重连  websocket-heartbeat-js
		
初探和实现websocket心跳重连(npm: websocket-heartbeat-js) 心跳重连缘由 websocket是前后端交互的长连接,前后端也都可能因为一些情况导致连接失效并且相互之间 ...
 - 初探和实现websocket心跳重连
		
心跳重连缘由 在使用websocket过程中,可能会出现网络断开的情况,比如信号不好,或者网络临时性关闭,这时候websocket的连接已经断开, 而浏览器不会执行websocket 的 onclos ...
 - node.js Websocket实现扫码二维码登录---GoEasy
		
最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式.当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些. 要实现扫码登录我们需要 ...
 - node.js Websocket消息推送---GoEasy
		
Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送 速度快,代码简单易懂上手快 浏览器兼容性:GoEasy推送 支持websocket ...
 - 关于socket tcp 断线重连
		
这个问题困扰过我几次,都没有来得及研究,今天研究一下. 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况 测试表明 (1)客户端已经连接,当服务端关 ...
 
随机推荐
- web.xml 配置文件?
			
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
 - nginx开发:ngx_sprintf
			
格式化参数%系列,如果误用的话,轻则输出不正确,重则nginx可能core. 1. 格式: %{格式描述}{输出类型描述}{数据类型描述} 2. 数据类型描述: V:字符串,对应ngx_str_t * ...
 - HTTP消息头(HTTP headers)-HTTP请求头与HTTP响应头
			
感谢大佬:https://itbilu.com/other/relate/E1T0q4EIe.html HTTP协议将传输的信息分隔为两部分:HTTP信息头.HTTP信息体.通过HTTP头信息,使客户 ...
 - 深入解析HashMap、HashTable (转)
			
集合类之番外篇:深入解析HashMap.HashTable Java集合类是个非常重要的知识点,HashMap.HashTable.ConcurrentHashMap等算是集合类中的重点,可谓&quo ...
 - 连接docker里面的mysql失败解决
			
场景:在虚拟机的docker容器中安装latest版本的mysql之后,在宿主机中使用navicat连接虚拟机中的mysql出现下图报错: 解决方法: 1.首先docker ps命令查看正在运行的容器 ...
 - 【ASP.NET Core】设置 Web API 响应数据的格式——FormatFilter特性篇
			
在上一篇烂文中老周已向各位介绍过 Produces 特性的使用,本文老周将介绍另一个特性类:FormatFilterAttribute. 这个特性算得上是筛选器的马甲,除了从 Attribute 类派 ...
 - requests实现接口测试
			
python+requests实现接口测试 - get与post请求基本使用方法 http://www.cnblogs.com/nizhihong/p/6567928.html Requests ...
 - AppiumForMac安装2
			
安装了两天的Python和Appium,各种不成功,到现在还不知道要怎么才能使用,两者之间的关联性还是没找到. 虽然很乱,还是把这期间用到的知识汇总下: 1.爬墙很重要,下载东西慢的很. 2.最新的M ...
 - k8s笔记--驱逐与重调度,以及deschueduler的一次实验
			
在Kubernetes中,调度是指将Pod放置到合适的Node上,然后对应的Node上的Kubelet才能够运行这些pod.调度器通过Kubernetes的监测机制来发现集群中新创建且尚未被调度的No ...
 - Solution -「Gym 102759C」Economic One-way Roads
			
\(\mathcal{Description}\) Link. 给定一个含 \(n\) 个点 \(m\) 条边的简单无向图,每条边的两种定向方法各有权值,求使得图强连通且定向权值和最小的方法. ...