首页 > 语言 > JavaScript > 正文

Javascript实现网络监测的方法

2024-05-06 16:24:09
字体:
来源:转载
供稿:网友

这篇文章主要介绍了Javascript实现网络监测的方法,可实现检测网络连接及网速的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

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

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

 

 
  1. (function(){ 
  2. var network = function(){ 
  3. var monitor = this
  4. /** 
  5. * @param {Funcation} speedInterval 
  6. */ 
  7. var speedInterval = null
  8. /** 
  9. * @param {Function} networkInterval 
  10. */ 
  11. var networkInterval = null
  12. /** 
  13. * @param {Function} reNetworkInterval 
  14. */ 
  15. var reNetworkInterval = null
  16. var time = 5000; 
  17. /** 
  18. * 获取网络连接状态 
  19. */ 
  20. var getConnectState = function(){ 
  21. return navigator.onLine ? 1 : 0; 
  22. };  
  23. /** 
  24. * 网络中断 
  25. */ 
  26. var disconnect = function(){ 
  27. // TODO ...  
  28. console.log("网速中断"); 
  29. window.clearInterval(reNetworkInterval); 
  30. reNetworkInterval = null
  31. endSpeed(); 
  32. endNetwork(); 
  33. window.setTimeout(function(){ 
  34. reNetworkInterval = window.setInterval(function(){ 
  35. if (getConnectState() == 1) { 
  36. window.clearInterval(reNetworkInterval); 
  37. reNetworkInterval = null
  38. startSpeed(); 
  39. startNetwork(); 
  40. else { 
  41. window.clearInterval(reNetworkInterval); 
  42. reNetworkInterval = null
  43. disconnect(); 
  44. }, time); 
  45. }, 2 * time); 
  46. }; 
  47. /** 
  48. * 网络速度 
  49. */ 
  50. var speed = { 
  51. /** 
  52. * 网速过慢 
  53. */ 
  54. bad : function(){ 
  55. // TODO ...  
  56. console.log("网速过慢"); 
  57. window.setTimeout(function(){ 
  58. if(getConnectState() == 1) { 
  59. window.clearInterval(networkInterval); 
  60. networkInterval = null
  61. startSpeed(); 
  62. else { 
  63. disconnect(); 
  64. }, 2 * time); 
  65. }, 
  66. /** 
  67. * 网速中等 
  68. */ 
  69. medium : function(){ 
  70. // TODO ...  
  71. console.log("网速中等"); 
  72. }, 
  73. /** 
  74. * 网速极佳 
  75. */ 
  76. great : function(){ 
  77. // TODO ...  
  78. console.log("网速极佳"); 
  79. }; 
  80. /** 
  81. * 开启速度监测 
  82. * @private 
  83. */ 
  84. var startSpeed = function(){ 
  85. window.clearInterval(speedInterval); 
  86. speedInterval = null
  87. if(getConnectState() == 1) { 
  88. speedInterval = window.setInterval(function(){ 
  89. var start = new Date().getTime(); 
  90. if (getConnectState() == 1) { 
  91. var img = document.getElementById("networkSpeedImage"); 
  92. if (!!!img) { 
  93. img = document.createElement("IMG"); 
  94. img.id = "networkSpeedImage"
  95. img.style.display = "none"
  96. document.body.appendChild(img); 
  97. try { 
  98. img.src = "http://www.baidu.com/img/baidu_jgylogo3.gif?_t=" + new Date().getTime(); 
  99. img.onload = function(){ 
  100. var end = new Date().getTime(); 
  101. var delta = end - start; 
  102. if (delta > 200) { 
  103. speed.bad(); 
  104. else if (delta > 100) { 
  105. speed.medium(); 
  106. else { 
  107. speed.great(); 
  108. }; 
  109. catch(e){ 
  110. speed.bad(); 
  111. else { 
  112. // TODO 网络断开 
  113. disconnect(); 
  114. }, time); 
  115. }else { 
  116. // TODO 网络断开 
  117. disconnect(); 
  118. }; 
  119. /** 
  120. * 停止速度监测 
  121. * @private 
  122. */ 
  123. var endSpeed = function(){ 
  124. window.clearInterval(speedInterval); 
  125. speedInterval = null
  126. }; 
  127. /** 
  128. * 开启网络连接监测 
  129. * @private 
  130. */ 
  131. var startNetwork = function(){ 
  132. if (getConnectState() == 1) { 
  133. networkInterval = window.setInterval(function(){ 
  134. if (getConnectState() == 0) { 
  135. disconnect(); 
  136. }, time); 
  137. else
  138. disconnect(); 
  139. }; 
  140. /** 
  141. * 结束网络连接监测 
  142. * @private  
  143. */ 
  144. var endNetwork = function(){ 
  145. window.clearInterval(networkInterval); 
  146. networkInterval = null
  147. }; 
  148. /** 
  149. * 网络监控开始 
  150. */ 
  151. this.start = function(){ 
  152. startNetwork(); 
  153. startSpeed(); 
  154. }; 
  155. /** 
  156. * 停止网络监控 
  157. */ 
  158. this.stop = function(){ 
  159. endSpeed(); 
  160. endNetwork(); 
  161. }; 
  162. }; 
  163. window.network = new network(); 
  164. }).call(this); 
  165. // 调用的时候,直接调用network.start(); 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选