首页 > 其他分享 >websocket

websocket

时间:2022-12-28 19:57:31浏览次数:48  
标签:WSocket websocket isReconnecting self ws reconnect console

/**
* websocket 工具类
*
WSocket.js

*/
class WSocket {
constructor(baseUrl) {
this.ws = null; //
this.timeout = 10000;
this.timeoutObj = null;
this.serverTimeoutObj = null;
this.baseUrl = baseUrl; //后端约定的定制
this.isReconnecting = false;
this.msgObjEvent = new Event("getMessage");
this.reconnectEvent = new Event("reconnectEvent");

this.init();
}
init() {
this.ws = new WebSocket(this.baseUrl);
this.ws.addEventListener('open', () => {
console.log("客户端链接成功");
//重连发送消息到后端,告诉后端,老师建立链接
// this.reconnectEvent.msg=Date.now();
document.dispatchEvent(this.reconnectEvent);
this.reset().start(); // 心跳检测
});
this.ws.addEventListener('close', () => {
console.log("客户端链接关闭");
if (this.isReconnecting) return; //
this.isReconnecting = true;
this.reconnect();
});
this.ws.addEventListener('error', () => {
console.log("客户端链接错误");
if (this.isReconnecting) return; //
this.isReconnecting = true;
this.reconnect();
});
this.ws.addEventListener('message', (e) => {
this.reset().start();
// console.log("接受消息:",e);
if (e.data.indexOf("PONG") === -1) {
this.msgObjEvent.msgObj = e.data;
document.dispatchEvent(this.msgObjEvent);
}
});
}

// 没连接上会一直重连,设置延迟避免请求过
reconnect(url) {
setTimeout(() => {
this.isReconnecting = false;//避免错误和关闭,连续执行reconnect;
this.init();
}, 5000);
}

reset() {
clearTimeout(this.timeoutObj);
clearTimeout(this.serverTimeoutObj);
return this;
}

start() {
const self = this;
this.timeoutObj = setTimeout(function () {
// 这里发送一个心跳,后端收到后,返回一个心跳消息,
// onmessage拿到返回的心跳就说明连接正常
self.ws.send(JSON.stringify({type: "HEART_BEAT", msg: 'WEB'}));
self.serverTimeoutObj = setTimeout(function () { // 如果超过一定时间还没重置,说明后端主动断开了
self.ws.close();// 如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
}, self.timeout);
}, self.timeout);
}
}

export default WSocket

-------------------------------------------------------------------------------------------------------------------------------
//存储webSocket实例化对象
import WSocket from '@/utils/WSocket'

initWebSocket(state) {
state.socket = new WSocket(VUE_APP_WEBSOCKET_URL);
},
-----------------------------------
if (this.socket == null) {
//在vuex中存储WebSocket
this.initWebSocket();
}

标签:WSocket,websocket,isReconnecting,self,ws,reconnect,console
From: https://www.cnblogs.com/connie256/p/17011139.html

相关文章

  • sb+websocket实例
    1、pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-star......
  • Nginx实现websocket代理的方式
    一个简单的实现,后续再补充。其中80端口是提供正常web访问的端口,9000是提供socket服务的端口。实际部署时出于安全考虑,可以将代理端口与后端服务器提供的端口设置为不同的值......
  • websocket-sharp 实现websocket
    第一步,使用VS创建一个应用程序第二步,添加引用 websocket-sharpDLL文件,或者NuGet程序包中添加第三部,创建Laputa类usingWebSocketSharp;usingWebSocketSharp.Serve......
  • WebSocket
    互联网发展到现在,早已超越了原始的初衷,人类从来没有像现在这样依赖过他;也正是这种依赖,促进了互联网技术的飞速发展。而终端设备的创新与发展,更加速了互联网的进化;HTTP/1.1规......
  • node.js创建WebSocket服务,并使用原生js ES6完成对WebSocket数据交互
     注意,前情提示:本代码基于《Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)》首先安装cnpminodejs-websocket在/api/demo/文件夹下面创建websocket.js  ......
  • 【SpringBoot】使用WebSocket做消息对话
    Http协议只能客户端发送---服务器回复,无法做到服务器主动向客户端发送消息,所以可以使用websocket来进行双向通道发消息 研究了一下抖音斗鱼的弹幕也是用的websocket,......
  • sb+websocket实例
    1、pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-sta......
  • 玩转 Go 生态|Hertz WebSocket 扩展简析
    WebSocket是一种可以在单个TCP连接上进行全双工通信,位于OSI模型的应用层。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据......
  • websocket携带jwt token
    在websocket中,目前未提供修改请求头字段的方法,不过可以借助于“Sec-WebSocket-Protocol”,将token放入请求头中,后端收到请求后,从请求头中取得token做校验。即:在前端websock......
  • 介绍一下 websocket
    一般的http请求都是短连接,而webpack的使用可以建立长连接;什么是websocketwebsocket是一种网络通信协议,是HTML5开始提供的一种在单个TCP连接上进行全双工通信......