websocket 断线重连

摘要:
服务端为swoole的websocket客户端js代码://1.创建websocket客户端varwsServer='ws://ip/';varlimitConnect=3;//断线重连次数vartimeConnect=0;webSocketInit(wsServer);//socket初始化functionwebSocketInit(service){varws=newWebSocket(ser

服务端为swoole 的websocket

客户端js代码:

//1.创建websocket客户端
  var wsServer = 'ws://ip/';
  var limitConnect = 3;  //断线重连次数
  var timeConnect =0;
  webSocketInit(wsServer);
  //socket初始化
  functionwebSocketInit(service){
    var ws = newWebSocket(service);
    ws.onopen = function() {
      console.log("已连接TCP服务器");
    };
    ws.onmessage = function(msg) {
      console.log(msg);
    };
    ws.onclose = function() {
      console.log('服务器已经断开');
      reconnect(service);
    };
    ws.onerror = function(err) {
      //console.log("服务器报错:");
reconnect(service);
    };
    //重连
    functionreconnect(service) {
      //lockReconnect加锁,防止onclose、onerror两次重连
      if(limitConnect>0){
        if(localStorage.getItem('lockReconnect')!=true){
          localStorage.setItem("lockReconnect",1);
          limitConnect --;
          timeConnect ++;
          console.log("第"+timeConnect+"次重连");
          //进行重连
          setTimeout(function(){
            webSocketInit(service);
            localStorage.removeItem("lockReconnect");
          },2000);
        }
      }else{
        console.log("TCP连接已超时");
      }
    }
    //心跳 * 回应
    setInterval(function(){
      websocket.send('');
    }, 1000*100);

注意:

1.onclose、onerror出现两个,tcp重连的时候会重连两次;为避免这种情况,需要进行加锁lockReconnect

2.limitConnect 断线重连次数;timeConnect从0次开始播报

效果:

websocket 断线重连第1张

完整代码:去掉了onerror,不需要加锁

//1.创建websocket客户端
  var wsServer = 'ws://ip/';
  var limitConnect = 3;  //断线重连次数
  var timeConnect = 0;
  webSocketInit(wsServer);
  //socket初始化
  functionwebSocketInit(service){
    var ws = newWebSocket(service);
    ws.onopen = function() {
      console.log("已连接TCP服务器");
    };
    ws.onmessage = function(msg) {
      console.log(msg);
    };
    ws.onclose = function() {
      console.log('服务器已经断开');
      reconnect(service);
    };
    //重连
    functionreconnect(service) {
      //lockReconnect加锁,防止onclose、onerror两次重连
      if(limitConnect>0){
          limitConnect --;
          timeConnect ++;
          console.log("第"+timeConnect+"次重连");
          //进行重连
          setTimeout(function(){
            webSocketInit(service);
          },2000);
      }else{
        console.log("TCP连接已超时");
      }
    }
    //心跳 * 回应
    setInterval(function(){
      websocket.send('');
    }, 1000*100);

作者:狂奔的蜗牛,转载请注明出处

免责声明:文章转载自《websocket 断线重连》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇深入剖析全链路灰度技术内幕Shiro快速入门下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

NestJS WebSocket 开始使用

使用NestJs提供WebSocket服务。本文会在新建项目的基础上增加2个类 Gateway 实现业务逻辑的地方 WebSocketAdapter WebSocket适配器 新建项目 新建一个项目来演示,用npm来管理项目。 nest new websocket-start 得到一个有基础功能的工程。 进入项目目录,安装2个库 npm i --sa...

WebSocket 实现长连接演示代码

服务端代码(node) const WebSocket = require('ws') const ws = new WebSocket.Server({ port: 8080 },()=>{ console.log('socket start') }) // 创建服务器 // 连接监听 clinet表示已经连接的客户端对象有多个 let...

spring Websocket 报 No suitab le default RequestUpgradeStrategy found

开始使用Tomcat8开发一切挺好的,但是公司的Paas平台上的服务器是Resin4.0.44,启动时包如下错误 WARN o.s.web.context.support.XmlWebApplicationContext - Exception e ncountered during context initialization - cancelling...

WebSocket实战

前言 互联网发展到现在,早已超越了原始的初衷,人类从来没有像现在这样依赖过他;也正是这种依赖,促进了互联网技术的飞速发展。而终端设备的创新与发展,更加速了互联网的进化; HTTP/1.1规范发布于1999年,同年12月24日,HTML4.01规范发布;尽管已到2012年,但HTML4.01仍是主流;虽然 HTML5的草案已出现了好几个年头,但转正日期,遥...

WebSocket实现前后端通讯

WebSocket实现前后端通讯         长安如梦里,何日是归期。   简介:我们上线了一个商城项目,移交运营团队使用之后,他们要求商城有新订单来的时候同时加上声音提示,让她们可以及时知道有单来了。我这边想了想,这个需求是在后端完成还是前端完成,但是仔细一想,无论是在前端还是后端完成都一样,需求注定甩不出去了,因为这个商城的后台管理没有前端工程师,...

springboot 使用webflux响应式开发教程(二)

本篇是对springboot 使用webflux响应式开发教程(一)的进一步学习。 分三个部分: 数据库操作webservicewebsocket 创建项目,artifactId = trading-service,groupId=io.spring.workshop。选择Reactive Web , Devtools, Thymeleaf , React...