网友回复
以下是vue版本的一个websocket重连机制,代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum=1.0,minimum=1.0,user-scalable=0" />
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/vue@2.6.1.js"></script>
</head>
<body>
<div id="app">
</div>
<script>
let websock = null;
let socketTimer = null;
let socketParam = {
type: 'test'
};
new Vue({
el: '#app',
name: 'test',
data () {
return {
socketUrl: 'ws://web.debug.only.bfw.wiki:9502',
timerWS: null, // 用于ws重连
timerCountWS: 0, // 用于重连计数,0-立刻开始重连,非0-1min重连一次。
timerFlagWS: true // 跳转页面了不再重连
}
},
mounted () {
this.initWebsocket()
},
destroyed () {
// 关闭websocket
this.timerFlagWS = false;
this.timerCountWS = 0;
clearTimeout(this.timerWS)
if (websock !== null) {
websock.close();
websock = null;
}
clearTimeout(socketTimer);
},
methods: {
initWebsocket () {
if (typeof WebSocket !== 'undefined') {
this.timerCountWS++;
// 浏览器支持Websocket通信协议 ...点击查看剩余70%
jquery版本的websocket断线重连,代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum=1.0,minimum=1.0,user-scalable=0" />
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(function() {
var lockReconnect = false;//避免重复连接
var ws = null; //WebSocket的引用
var wsUrl = "web.debug.only.bfw.wiki:9992"; //这个要与后端提供的相同
//创建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); //这里设置重连间...点击查看剩余70%


