怎么用nodejs检测网络状态?
nodejs可以使用檢測因特網狀態的庫internet-available、is-online來檢查網絡狀態,其原理是檢測dns連接狀態。這兩個庫提供了超時檢測。
用nodejs檢測網絡狀態:
internet-available
這個庫檢測因特網連接狀態原理,是檢測dns連接狀態。
這里大家肯定有個疑問,使用nodejs原生模塊dns不是更簡潔嗎?
你說的沒錯,nodejs確實提供這樣的方法,但是dns原生模塊并沒有提供超時檢測。internet-available可以設置超時參數,默認是5000ms(依賴dns-socket庫實現dns超時,有興趣可以研究其源碼,這里不做展開)。
internet-available使用舉例:
var internetAvailable = require("internet-available");internetAvailable().then(function(){console.log("Internet available"); }).catch(function(){console.log("No internet"); });如果想加入檢測次數和每次檢測超時時間,代碼如下:
var internetAvailable = require("internet-available");internetAvailable({timeout: 4000,retries: 10, }).then(function(){console.log("Internet available"); }).catch(function(){console.log("No internet"); });internet-available默認檢測的DNS域名是google.com,如果想自定義域名,代碼如下:
var internetAvailable = require("internet-available");internetAvailable({domainName: "xxxxx.com",port: 53,host: '8.8.8.8' // 默認,國內請改成114.114.114.114 }).then(() => {console.log("Internet available"); }).catch(() => {console.log("No internet"); });備注:8.8.8.8是谷歌公司提供的免費DNS服務器,該地址是全球通用,相對來說,更適合國外以及訪問國外網站的用戶使用,國內更適合用114.114.114.114。
?
is-online
is-online與internet-available檢測方式相同,唯一區別是is-online可以在nodejs和瀏覽器環境同時運行。在瀏覽器環境下,通過navigator.onLine返回網絡連接狀態,但與html5 online、offline事件一樣,只能檢測本地連接。
is-online使用舉例
const isOnline = require('is-online');isOnline().then(online => {if(online){console.log("We have internet");}else{console.log("Houston we have a problem");} });此庫也提供超時設置,且可以設置Internet協議版本,這是一個通常不需要設置的高級選項,但它對于專門斷言IPv6連接非常有用,代碼如下
var isOnline = require('is-online');isOnline({timeout: 5000,version: "v4" // v4 or v6 }).then(online => {if(online){console.log("Internet available");}else{console.log("No internet");} });?
總結
以上是生活随笔為你收集整理的怎么用nodejs检测网络状态?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web前端开发发展前景,前端开发学习方法
- 下一篇: 【练习】jsonP的实际应用,移动端we