From 3af3174c51b32e77603dcbac225587ae460e86ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A2=AB=E9=81=97=E5=BF=98=E7=9A=84=E8=AE=B0=E5=BF=86?= <32097237+YIWANG-sketch@users.noreply.github.com> Date: Wed, 18 Sep 2024 22:26:45 +0800 Subject: [PATCH] network status monitoring --- networkMonitor.mjs | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 networkMonitor.mjs diff --git a/networkMonitor.mjs b/networkMonitor.mjs new file mode 100644 index 0000000..a772503 --- /dev/null +++ b/networkMonitor.mjs @@ -0,0 +1,51 @@ +import dns from 'dns'; +import { EventEmitter } from 'events'; + +class NetworkMonitor extends EventEmitter { + constructor() { + super(); + this.isBlocked = false; + this.checkInterval = null; + } + + async checkConnection() { + return new Promise((resolve) => { + dns.lookup('you.com', (err) => { + if (err && err.code === 'ENOTFOUND') { + resolve(false); + } else { + resolve(true); + } + }); + }); + } + + async startMonitoring() { + console.log("开始网络监控..."); + this.checkInterval = setInterval(async () => { + const isConnected = await this.checkConnection(); + if (!isConnected && !this.isBlocked) { + this.isBlocked = true; + this.emit('networkDown'); + console.log("检测到网络异常"); + } else if (isConnected && this.isBlocked) { + this.isBlocked = false; + this.emit('networkUp'); + console.log("网络恢复正常"); + } + }, 5000); + } + + stopMonitoring() { + if (this.checkInterval) { + clearInterval(this.checkInterval); + this.checkInterval = null; + } + } + + isNetworkBlocked() { + return this.isBlocked; + } +} + +export default NetworkMonitor; \ No newline at end of file