【问题标题】:How to detect network changes using Node.js如何使用 Node.js 检测网络变化
【发布时间】:2020-08-09 14:16:48
【问题描述】:

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

您知道任何实现此功能的实现或模块吗?

我想知道是否存在类似的东西:

  reachability.on('change' function(){...});
  reachability.on('connect' function(){...});
  reachability.on('disconnect' function(){...});

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

感谢任何帮助。谢谢

【问题讨论】:

    标签: node.js


    【解决方案1】:

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

    检测死连接的最简单方法是使用应用程序级别的 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!');
    });
    

    【讨论】:

    • 我正在使用的解决方法是使用模块'dns'并调用'resolve'的应用程序级ping(因为我需要我的应用程序能够访问特定域而不是特定域知识产权)。我是这样使用的: 1 - process.nextTick 调用一个函数来尝试解析一个 dns。 2 - 它是否设法解决我触发特定事件。 3 - process.nextTick 调用的函数无限期运行它可以工作,但是... 我应该坚持这种方法吗?有什么问题吗?谢谢
    • 我想这取决于您的需求。如果您需要这种快速响应,我想应该没问题,但如果您不需要快速知道 ,则可以延迟检查,例如每秒检查一次。同样,您还可以生成一个子进程,该子进程只是对一些响应 ping 的连接良好的系统执行永无止境的ping -v。然后解析输出以查找 ICMP 错误。
    • 我就是这样做的。该函数尝试每 2 秒解析一次 dns。我要试试后一种方法。您是否知道任何好的资源作为参考来实现您提到的内容?我从 Node.js 世界开始。谢谢
    • 我已经更新了我的答案,包括一个使用 ping 的示例(至少在 Linux 上)。
    • 这很难过。检测网络连接的全部原因是为了避免 poll 的需要,就像 ping 一样。操作系统在检测这一点方面做得非常好,以至于它们有时会在让您知道它时侵入,因此应用程序无法检测到这一点的事实令人遗憾。
    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多