我看过os模块和ip模块,但是那些非常擅长告诉我系统的当前IP地址,如果新的在线或离线的话。我知道我可以使用udev规则来完成这个问题(我在Ubuntu上),但我希望有一种方法只使用节点来做到这一点。如何发现网络接口是否已启动?
答案 0 :(得分:2)
您始终可以使用process.nextTick
设置侦听器,并查看自上次以来接口集是否已更改。如果是这样,请将更新发送给任何听众。
'use strict';
let os = require('os');
// Track the listeners and provide a way of adding a new one
// You would probably want to put this into some kind of module
// so it can be used in various places
let listeners = [];
function onChange(f) {
if (listeners.indexOf(f) === -1) {
listeners.push(f);
}
}
let oldInterfaces = [];
process.nextTick(function checkInterfaces() {
let interfaces = os.networkInterfaces();
// Quick and dirty way of checking for differences
// Not very efficient
if (JSON.stringify(interfaces) !== JSON.stringify(oldInterfaces)) {
listeners.forEach((f) => f(interfaces));
oldInterfaces = interfaces;
}
// Continue to check again on the next tick
process.nextTick(checkInterfaces);
});
// Print out the current interfaces whenever there's a change
onChange(console.log.bind(console));
答案 1 :(得分:0)
不幸的是,在节点中没有事件基础方法可以做到这一点。我们提出的解决方案是在设备脱机并联机时使用UDEV生成事件。