是否有节点方法来检测网络接口是否联机?

时间:2016-06-06 20:49:19

标签: javascript node.js

我看过os模块和ip模块,但是那些非常擅长告诉我系统的当前IP地址,如果新的在线或离线的话。我知道我可以使用udev规则来完成这个问题(我在Ubuntu上),但我希望有一种方法只使用节点来做到这一点。如何发现网络接口是否已启动?

2 个答案:

答案 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生成事件。