let webstockUrl='ws://192.168.1.119:8001';
let WebSocketObj=null;
var lockReconnect = false;//避免重复连接
var tt;
function createWebSocket() {
try {
WebSocketObj= new WebSocket(webstockUrl);
console.log('初始化');
init();
} catch(e) {
console.log(e);
console.log('catch');
reconnect(webstockUrl);
}
}
function init() {
WebSocketObj.onclose = function () {
console.log('链接关闭');
reconnect(webstockUrl);
};
WebSocketObj.onerror = function() {
console.log('发生异常了');
reconnect(webstockUrl);
};
WebSocketObj.onopen = function () {
//心跳检测重置
heartCheck.start();
};
WebSocketObj.onmessage = function (event) {
//拿到任何消息都说明当前连接是正常的
heartCheck.start();
}
}
/**
* 尝试重连
* @param url
*/
function reconnect(url) {
console.log('尝试重连',lockReconnect);
if(lockReconnect) {
return;
};
lockReconnect = true;
//没连接上会一直重连,设置延迟避免请求过多
tt && clearTimeout(tt);
tt = setTimeout(function () {
createWebSocket(url);
lockReconnect = false;
}, 5000);
}
//心跳检测
var heartCheck = {
timeout: 5000,
timeoutObj: null,
serverTimeoutObj: null,
start: function(){
// console.log('start');
var self = this;
this.timeoutObj && clearTimeout(this.timeoutObj);
this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj);
this.timeoutObj = setTimeout(function(){
//这里发送一个心跳,后端收到后,返回一个心跳消息,
WebSocketObj.send("ping");
self.serverTimeoutObj = setTimeout(function() {
console.log('');
WebSocketObj.close();
}, self.timeout);
}, this.timeout)
}
}
createWebSocket(webstockUrl);
export const $webstock =WebSocketObj
webstock的心跳包实现
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 写在开始之前 这篇文章的由来是作者以前在看CocoaAsyncSocket一时兴起写的一个即时通讯小demo的介绍...
- 接着上次讲的socket服务器 ,这次讲客户端的实现,比较简单,还是直接撸代码 .h文件 .m实现 调用调用调用调...
- 心跳包的发送,通常有两种技术 方法1:应用层自己实现的心跳包 由应用程序自己发送心跳包来检测连接是否正常,大致的方...