Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Node.js检测网络更改_Node.js - Fatal编程技术网

如何使用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这样的事情需要轮询。操作系统在检测这一点上做得太好了,以至于有时在让你知道这一点时,他们几乎是侵入性的,因此应用程序无法检测到这一点,这一事实令人遗憾。