如何使用Node.js检测网络更改
如何侦听网络连接中的更改 您知道实现这一点的任何实现或模块吗 我想知道是否存在类似的情况:如何使用Node.js检测网络更改,node.js,Node.js,如何侦听网络连接中的更改 您知道实现这一点的任何实现或模块吗 我想知道是否存在类似的情况: reachability.on('change' function(){...}); reachability.on('connect' function(){...}); reachability.on('disconnect' function(){...}); 我在谷歌上搜索过,找不到任何关于它的信息 感谢您的帮助。谢谢节点没有内置此类功能。您可能能够连接到操作系统,以监听网络接口的上
reachability.on('change' function(){...});
reachability.on('connect' function(){...});
reachability.on('disconnect' function(){...});
我在谷歌上搜索过,找不到任何关于它的信息
感谢您的帮助。谢谢节点没有内置此类功能。您可能能够连接到操作系统,以监听网络接口的上升或下降,甚至是以太网电缆的拔出,但任何其他类型的连接丢失都很难立即确定 检测死连接的最简单方法是使用应用程序级ping/heartbeat机制和/或某种超时 如果网络连接检测不是特定于特定网络请求的,则可以执行类似操作,通过持续ping响应ping的某个连接良好的系统来全局测试网络连接。例如:
var EventEmitter = require('events').EventEmitter,
spawn = require('child_process').spawn,
rl = require('readline');
var RE_SUCCESS = /bytes from/i,
INTERVAL = 2, // in seconds
IP = '8.8.8.8';
var proc = spawn('ping', ['-v', '-n', '-i', INTERVAL, IP]),
rli = rl.createInterface(proc.stdout, proc.stdin),
network = new EventEmitter();
network.online = false;
rli.on('line', function(str) {
if (RE_SUCCESS.test(str)) {
if (!network.online) {
network.online = true;
network.emit('online');
}
} else if (network.online) {
network.online = false;
network.emit('offline');
}
});
// then just listen for the `online` and `offline` events ...
network.on('online', function() {
console.log('online!');
}).on('offline', function() {
console.log('offline!');
});
我正在使用的解决方法是使用模块“dns”并调用“resolve”的应用程序级ping(因为我需要我的应用程序能够访问特定的域而不是特定的IP)。我这样使用:1-process.nextTick调用函数来尝试解析dns。2-无论它是否设法解决,我都会触发特定事件。3-process.nextTick调用的函数无限期运行它可以工作,但是。。。我应该坚持这种方法吗?有什么问题吗?谢谢,我想这取决于你的需要。如果你需要那种快速的响应,我想那应该没问题,但是如果你不需要那么快知道,你可以延迟检查,这样它只会每秒检查一次。按照同样的思路,您还可以生成一个子进程,该子进程只会对某个连接良好的系统执行永不停止的ping-v,该系统会响应ping。然后分析输出以查找ICMP错误。我正是这样做的。该函数尝试每2秒解析一次dns。我将尝试后一种方法。你知道有什么好的资源可以作为实现你提到的东西的参考吗?我从Node.js世界开始。谢谢,我已经更新了我的答案,添加了一个使用
ping
(至少在Linux上)的示例。这很令人伤心。检测网络连接的全部原因是为了避免像ping这样的事情需要轮询。操作系统在检测这一点上做得太好了,以至于有时在让你知道这一点时,他们几乎是侵入性的,因此应用程序无法检测到这一点,这一事实令人遗憾。