js websocket断线重连实例代码

 更新时间:2023年07月04日 14:36:33   作者:牛奔  
这篇文章主要为大家介绍了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);/**启动连接**/
});

引用

初探和实现websocket心跳重连(npm: websocket-heartbeat-js)

 前端对接WebSocket与心跳重连 

以上就是js websocket断线重连实例代码的详细内容,更多关于js websocket断线重连的资料请关注脚本之家其它相关文章!

相关文章

  • JavaScript实现一键复制内容剪贴板

    JavaScript实现一键复制内容剪贴板

    这篇文章主要为大家介绍了JavaScript实现一键复制内容,document.execCommand原生JS设置剪贴板的实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • javascript字符串单个字符访问方法

    javascript字符串单个字符访问方法

    这篇文章主要为大家介绍了javascript字符串单个字符访问方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 使用HTTP Referer实现图片防盗图文示例详解

    使用HTTP Referer实现图片防盗图文示例详解

    这篇文章主要为大家介绍了使用HTTP Referer实现图片防盗图文示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 微信小程序(二)Window 配置详细介绍

    微信小程序(二)Window 配置详细介绍

    这篇文章主要介绍了微信小程序(二)Window 配置详细介绍的相关资料,需要的朋友可以参考下
    2016-09-09
  • 微信小程序 图片上传实例详解

    微信小程序 图片上传实例详解

    这篇文章主要介绍了微信小程序 图片上传实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • Three.js引用和环境搭建过程详解

    Three.js引用和环境搭建过程详解

    这篇文章主要为大家介绍了Three.js引用和环境搭建过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 美化下拉列表

    美化下拉列表

    美化下拉列表...
    2006-06-06
  • 微信小程序商品到详情的实现

    微信小程序商品到详情的实现

    这篇文章主要介绍了微信小程序商品到详情的实现的相关资料,需要的朋友可以参考下
    2017-06-06
  • 前端JavaScript大管家 package.json

    前端JavaScript大管家 package.json

    这篇文章主要介绍了前端JavaScript大管家 package.json,在每个前端项目中,都有package.json文件,它是项目的配置文件,常见的配置有配置项目启动、打包命令,声明依赖包等,下面我们就来学习 package.json的详细内容,需要的朋友可以参考一下
    2021-10-10
  • apply call bind方法原理及使用场景示例详解

    apply call bind方法原理及使用场景示例详解

    这篇文章主要为大家介绍了apply&call&bind方法原理及使用场景示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论