首页 > 其他分享 >websocket 多次重新连接

websocket 多次重新连接

时间:2023-09-25 15:56:11浏览次数:31  
标签:function WebSocket socket sendHeartbeat 多次 heartbeatTimer 心跳 websocket 连接

let socket = null;
let heartbeatTimer = null;
let reconnectTimer = null;

// 定义重连函数
function reconnect() {
  clearTimeout(reconnectTimer);
  reconnectTimer = setTimeout(() => {
    socket = new WebSocket('ws://url');
  }, 3000);
}

// 发送心跳数据
function sendHeartbeat() {
  clearTimeout(heartbeatTimer);
  heartbeatTimer = setTimeout(() => {
    socket.send('heartbeat');
  }, 5000); 
}

// 建立WebSocket连接
socket = new WebSocket('ws://url');

// 连接成功回调
socket.onopen = function() {
  console.log('WebSocket连接成功');
  // 首次连接成功后发送心跳数据
  sendHeartbeat();  
}

// 收到消息回调
socket.onmessage = function(e) {
  console.log('收到消息:', e.data);
  // 如果收到心跳数据,则再发送心跳数据
  if (e.data === 'heartbeat') {
    sendHeartbeat();
  }
}

// socket关闭回调 
socket.onclose = function() {
  console.log('WebSocket断开连接');
  // 启动重连定时器
  reconnect();  
}

// 发生错误回调
socket.onerror = function(e) {
  console.log('WebSocket错误:', e);
} 

// 启动心跳检测定时器
heartbeatTimer = setInterval(() => {
  // 判断socket状态,关闭或已关闭则重连
  if (!socket || socket.readyState == WebSocket.CLOSED) { 
    reconnect(); 
  } else {
    // 发送心跳数据
    sendHeartbeat();
  }
}, 5000); 
 

标签:function,WebSocket,socket,sendHeartbeat,多次,heartbeatTimer,心跳,websocket,连接
From: https://www.cnblogs.com/chenkg/p/17728100.html

相关文章

  • Winform中使用System.Windows.Forms.Timer多次启动停止计时器时绑定事件会重复多次执
    场景C#中实现计时器功能(定时任务和计时多长时间后执行某方法):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106274074以上关于定时器的使用。在实现点击按钮启动定时器,点击停止按钮停止定时器时发现,重复多次后会导致定时器方法累计重复执行。联想到如下情况......
  • 中国蚁剑为啥没有jsp连接
    大佬们,我是个刚入门的小菜鸟,因为没有开通会员只能用文字说明.最近我研究到了用jsp马的方式文件上传,我想用蚁剑连接,发现我的蚁剑选项里没有jsp类型,只有php、asp、custom,我重新下载了很多次,百度、csdn、b站也搜了很多次,就是没找到解决方案.想问问有没有大佬知道的.......
  • Redis 客户端连接
     Redis命令用于在redis服务上执行操作。要在redis服务上执行命令需要一个redis客户端。Redis客户端在Redis包中有提供,这个包在我们前面的安装教程中就有安装过了。Redis通过监听一个TCP端口或者Unixsocket的方式来接收来自客户端的连接,当一个连接建立......
  • SpringBoot WebSocket STOMP
    SpringBootWebSocketSTOMP关键词:Springboot,WebSocket,STOMP,broadcast,sendToUser,MessageMapping,SubscribeMapping,convertAndSendToUserSTOMP是一种发布订阅的模式,被订阅者发布消息以广播形式发送。如果需要一对一发送或者说指定某个客户端发送,springboot提供了con......
  • Java连接MSSQL2012数据报TLS10 is not accepted by client preferences [TLS13, TLS12
    这一问题好像是因为Java新版本禁用了些老的加密算法引起的,解决方法为修改java.security文件里的配置信息即可。我用的是Java21,在安装目录 Java\jdk-21\conf\security下找到java.security文件,用记事本打开,搜索TLSv1,大概在752行的位置有如下配置信息:jdk.tls.disabledAlgorithm......
  • [转]Websocket 底层是 TCP 还是 UDP?白话版解析 TCP 和 UDP 传输过程
    原文地址:Websocket底层是TCP还是UDP?白话版解析TCP和UDP传输过程-掘金写在前面在前面陆陆续续写了好几篇数字孪生相关的文章,而其中所涉及的一个其他项目比较不常使用的技术,网络通讯协议Websocket,这个协议主要用于服务器定时向客户端推送数据,相比HTTP更加适合数字......
  • SQL 表连接
    CREATEDATABASEstudent;--新建学生数据库CREATETABLEstudent.student(--新建学生表studentidINTPRIMARYKEY,nameVARCHAR(50),ageINT,sexVARCHAR(10));INSERTINTOstudent.student(studentid,name,age,sex)--插入3条数据VALUES(1,'......
  • java如何实现Socket的长连接和短连接
    讨论Socket必讨论长连接和短连接一、长连接和短连接的概念1、长连接与短连接的概念:前者是整个通讯过程,客户端和服务端只用一个Socket对象,长期保持Socket的连接;后者是每次请求,都新建一个Socket,处理完一个请求就直接关闭掉Socket。所以,其实区分长短连接就是:整个客户和服务端的通......
  • SSH连接慢
    连接linux服务器一般都是使用SSH远程连接的方式。有时,SSH连接速度很慢,但是ping时一切正常。大致是有以下几种原因:server的sshd会去DNS查找访问的clientip的hostname,如果DNS不可用或者没有相关记录,就会消耗一段时间。在authenticationgssapi-with-mic有时候也会消耗一段时间......
  • 《动手学深度学习 Pytorch版》 7.7 稠密连接网络
    7.7.1从ResNet到DenseNetDenseNet可以视为ResNet的逻辑扩展。ResNet将函数展开为\(f(\boldsymbol{x})=x+g(\boldsymbol{x})\),即一个简单的线性项和一个复杂的非线性项。若将\(f\)拓展成超过两部分,则DenseNet便是其中一种方案。这即是DenseNet和ResNet的主要区......