js实现每次程序发送一个数据 ,多次发送不一样,5秒后继续执行多次程序,判断如果五秒后发送过来的数据和上次不一样,少的删除多的增加

前言

JS操作,随着互联网发展,有一种操作叫做socket长链接,这个操作是我在用nodejs做服务端,判断每五秒接收一次多个客户端传来的心跳包,如果超过五秒没有接收到则判断他为断开连接

js实现每次程序发送一个数据 ,多次发送不一样,5秒后继续执行多次程序,判断如果五秒后发送过来的数据和上次不一样,少的删除多的增加_第1张图片
开始!~

首先定义一个变量数组用来存储接收到的客户端ID(心跳包数据)

 var IDSNew = new Array();

因为有多个设备,所以五秒之内可能会执行多次服务,所以要让他每个客户端连接的时候只执行一次

var isopen = true;

这个操作需要放到每次接收客户端ID处,(client.deviceId,是接收的数据,New Date()是初始化每次接收数据的时间)!~

IDSNew[client.deviceId]=new Date();

例如:

js实现每次程序发送一个数据 ,多次发送不一样,5秒后继续执行多次程序,判断如果五秒后发送过来的数据和上次不一样,少的删除多的增加_第2张图片
微信图片_20170911112811.png

下面开始主要操作!!!!

监控设客户端ID中有哪些设备已经五秒种没有传来数据

 if(isopen){
        //只执行一次
        isopen=false;
        //设置打印日志
        var logn=0;
        setInterval(function(){
            logn++;
            log("开始执行任务第"+logn+"次");

          //循环数组(key键为客户端ID,值为上次发送的时间)
          for(var key in IDSNew)
          {
              //现在的时间
              var date=new Date();
              //现在的时间和此ID上次的时间差
              var datetime=date-IDSNew[key];
              //开始判断
              if(datetime!=NaN&&datetime>6000 && key != "" && key!=0)
              {
                  log("离线的设备ID为"+key)
                  //删除已经离线的客户端
                  delete IDSNew[key];
              }
          }
      //如果客户端是五秒发一次,建议判断时间为六秒(因为可能会有网络延迟)
      },6000)
    }
js实现每次程序发送一个数据 ,多次发送不一样,5秒后继续执行多次程序,判断如果五秒后发送过来的数据和上次不一样,少的删除多的增加_第3张图片
哈哈哈!!!!

有没有对你起到帮助呢!不懂的可以咨询:WX:nxy18336033555 QQ:1264512198 加的时候备注一下哦!~

你可能感兴趣的:(js实现每次程序发送一个数据 ,多次发送不一样,5秒后继续执行多次程序,判断如果五秒后发送过来的数据和上次不一样,少的删除多的增加)