Javascript实现网络监测的方法


Posted in Javascript onJuly 31, 2015

本文实例讲述了Javascript实现网络监测的方法。分享给大家供大家参考。具体实现方法如下:

该代码可监测网络是否连接及网速的快慢状态。

(function(){
var network = function(){
 var monitor = this;
 /**
  * @param {Funcation} speedInterval
  */
 var speedInterval = null;
 /**
  * @param {Function} networkInterval
  */
 var networkInterval = null;
 /**
  * @param {Function} reNetworkInterval
  */
 var reNetworkInterval = null;
 var time = 5000;
 /**
  * 获取网络连接状态
  */
 var getConnectState = function(){
  return navigator.onLine ? 1 : 0;
 }; 
 /**
  * 网络中断
  */
 var disconnect = function(){
  // TODO ... 
  console.log("网速中断");
  window.clearInterval(reNetworkInterval);
  reNetworkInterval = null;
  endSpeed();
  endNetwork();
  window.setTimeout(function(){
   reNetworkInterval = window.setInterval(function(){
    if (getConnectState() == 1) {
     window.clearInterval(reNetworkInterval);
     reNetworkInterval = null;
     startSpeed();
     startNetwork();
    } else {
     window.clearInterval(reNetworkInterval);
     reNetworkInterval = null;
     disconnect();
    }
   }, time);
  }, 2 * time);
 };
 /**
  * 网络速度
  */
 var speed = {
   /**
    * 网速过慢
    */
   bad : function(){
    // TODO ... 
    console.log("网速过慢");
    window.setTimeout(function(){
     if(getConnectState() == 1) {
      window.clearInterval(networkInterval);
      networkInterval = null;
      startSpeed();
     } else {
      disconnect();
     }
    }, 2 * time);
   },
   /**
    * 网速中等
    */
   medium : function(){
    // TODO ... 
    console.log("网速中等");
   },
   /**
    * 网速极佳
    */
   great : function(){
    // TODO ... 
    console.log("网速极佳");
   }
 };
 /**
  * 开启速度监测
  * @private
  */
 var startSpeed = function(){
  window.clearInterval(speedInterval);
  speedInterval = null;
  if(getConnectState() == 1) {
   speedInterval = window.setInterval(function(){
    var start = new Date().getTime();
    if (getConnectState() == 1) {
     var img = document.getElementById("networkSpeedImage");
     if (!!!img) {
      img = document.createElement("IMG");
      img.id = "networkSpeedImage";
      img.style.display = "none";
      document.body.appendChild(img);
     }
     try {
      img.src = "http://www.baidu.com/img/baidu_jgylogo3.gif?_t=" + new Date().getTime();
      img.onload = function(){
       var end = new Date().getTime();
       var delta = end - start;
       if (delta > 200) {
        speed.bad();
       } else if (delta > 100) {
        speed.medium();
       } else {
        speed.great();
       }
      };
     } catch(e){
      speed.bad();
     }
    } else {
     // TODO 网络断开
     disconnect();
    }
   }, time);
  }else {
   // TODO 网络断开
   disconnect();
  }
 };
 /**
  * 停止速度监测
  * @private
  */
 var endSpeed = function(){
  window.clearInterval(speedInterval);
  speedInterval = null;
 };
 /**
  * 开启网络连接监测
  * @private
  */
 var startNetwork = function(){
  if (getConnectState() == 1) {
   networkInterval = window.setInterval(function(){
    if (getConnectState() == 0) {
     disconnect();
    }
   }, time);
  } else{
   disconnect();
  }
 };
 /**
  * 结束网络连接监测
  * @private 
  */
 var endNetwork = function(){
  window.clearInterval(networkInterval);
  networkInterval = null;
 };
 /**
  * 网络监控开始
  */
 this.start = function(){
  startNetwork();
  startSpeed();
 };
 /**
  * 停止网络监控
  */
 this.stop = function(){
  endSpeed();
  endNetwork();
 };
};
  window.network = new network();
}).call(this);
// 调用的时候,直接调用network.start();

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
Extjs学习笔记之一 初识Extjs之MessageBox
Jan 07 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
Dec 18 Javascript
不得不分享的JavaScript常用方法函数集(上)
Dec 23 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
Sep 04 Javascript
jQuery动态创建元素以及追加节点的实现方法
Oct 20 Javascript
connection reset by peer问题总结及解决方案
Oct 21 Javascript
vue权限路由实现的方法示例总结
Jul 29 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
Oct 07 Javascript
vue.draggable实现表格拖拽排序效果
Dec 01 Javascript
JQuery省市联动效果实现过程详解
May 08 jQuery
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
May 28 Javascript
详解JavaScript类型判断的四种方法
Oct 21 Javascript
jquery模拟alert的弹窗插件
Jul 31 #Javascript
JSON字符串转JSON对象
Jul 31 #Javascript
javascript实现简单的页面右下角提示信息框
Jul 31 #Javascript
JavaScript实现快速排序的方法
Jul 31 #Javascript
javascript常用正则表达式汇总
Jul 31 #Javascript
轻量级网页遮罩层jQuery插件用法实例
Jul 31 #Javascript
js实时获取并显示当前时间的方法
Jul 31 #Javascript
You might like
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
php通过各种函数判断0和空
2020/07/04 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
vue生命周期的探索
2019/04/03 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
vant实现购物车功能
2020/06/29 Javascript
python使用wxpython开发简单记事本的方法
2015/05/20 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Django开发中复选框用法示例
2018/03/20 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
详解关于Django中ORM数据库迁移的配置
2018/10/08 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
Python容器类型公共方法总结
2020/08/19 Python
教你如何用python操作摄像头以及对视频流的处理
2020/10/12 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
自荐信的五个重要部分
2013/10/29 职场文书
机电一体化应届生求职信范文
2014/01/24 职场文书
校园活动策划方案
2014/06/13 职场文书
反四风对照检查材料
2014/09/22 职场文书
2014年妇女工作总结
2014/12/06 职场文书
Redis入门教程详解
2021/08/30 Redis
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库
MySQL数据库表约束讲解
2022/06/21 MySQL