gpt4 book ai didi

javascript - Node.js 中网络状态变化的事件?

转载 作者:行者123 更新时间:2023-12-02 21:04:30 25 4
gpt4 key购买 nike

我找到的所有解决方案都只是轮询服务。例如。他们每秒 ping google.com 一次,以查看 Node 服务是否可以访问互联网。

但是,我正在寻找一种更干净的基于事件的解决方案。在浏览器中,有 window.ononlinewindow.onoffline。我知道这些并不完美,但总比没有好。

我不一定在寻找一种方法来查看 Node 服务是否在线,我只是在寻找一种方法来查看操作系统是否认为它在线。例如。如果操作系统没有连接到任何网络接口(interface),那么它肯定是离线的。但是,如果它连接到路由器,那么我也许可以 ping google.com

最佳答案

我相信目前这是判断您是否已连接的最有效方法。

如果您想要一个“基于事件”的解决方案,您可以使用如下方式包装轮询服务:

connectivity-checker.js

const isOnline = require("is-online");

function ConnectivityChecker (callback, interval) {
this.status = false;
this.callback = callback;
this.interval = this.interval;
// Determines if the check should check on the next interval
this.shouldCheckOnNextInterval = true;
}

ConnectivityChecker.prototype.init = function () {
this.cleanUp();

this.timer = setInterval(function () {
if (this.shouldCheck) {
isOnline().then(function (status) {
if (this.status !== status) {
this.status = status;
this.callback(status);
this.shouldCheckOnNextInterval = true;
}
}).catch(err => {
console.error(err);
this.shouldCheckOnNextInterval = true;
})

// Disable 'shouldCheckOnNextInterval' if current check has not resolved within the interval time
this.shouldCheckOnNextInterval = false;
}
}, this.interval);
}

ConnectivityChecker.prototype.cleanUp = function () {
if (this.timer) clearInterval(this.timer);
}

export { ConnectivityChecker };

然后在您的使用网站中(例如 app.js)

app.js

const { ConnectivityChecker } = require("/path/to/connectivity-checker.js");

const checker = new ConnectivityChecker(function(isOnline) {
// Will be called ONLY IF isOnline changes from 'false' to 'true' or from 'true' to 'false'.
// Will be not called anytime isOnline status remains the same from between each check
// This simulates the event-based nature you're looking for


if (isOnline) {
// Do stuff if online
} else {
// Do stuff if offline
}
}, 5000);

// Where your app starts, call
checker.init();

// Where your app ends, call
// checker.cleanUp();

希望这有帮助...

关于javascript - Node.js 中网络状态变化的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54055630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com