如何使用Node.js检测网络更改

rod*_*tes 4 node.js

如何监听网络连接的变化?

你知道实现这个的任何实现或模块吗?

我想知道是否存在类似于:

  reachability.on('change' function(){...});
  reachability.on('connect' function(){...});
  reachability.on('disconnect' function(){...});
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索了它,但却找不到任何关于它的信息.

任何帮助表示赞赏.谢谢

msc*_*dex 6

节点内置了这样的功能.您可能能够连接到操作系统以侦听网络接口上升或下降甚至拔掉以太网电缆,但任何其他类型的连接丢失都很难立即确定.

检测死连接的最简单方法是使用应用程序级ping /心跳机制和/或某种超时.

如果网络连接检测不是特定于特定网络请求,您可以通过不断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!');
});
Run Code Online (Sandbox Code Playgroud)

  • 这真是难过;这真是伤心.检测网络连接的全部原因是为了避免需要*poll*这就像ping这样的东西.操作系统已经非常善于检测到这种情况,以至于它们有时会让你知道它,因此应用程序无法检测到这一点的事实只是令人悲伤. (2认同)