如何从一个Node.js应用程序“平”?

我想从我的node.js应用程序ping一个服务器。

那可行吗?

谢谢

您可以使用exec来调用系统ping命令

 var sys = require('sys') var exec = require('child_process').exec; function puts(error, stdout, stderr) { sys.puts(stdout) } exec("ping -c 3 localhost", puts); 

node-net-ping是一个使用原始套接字的真棒模块。

而且,如果您仅查找原始套接字,则同一开发人员也会为此find一个模块: node-raw-socket 。

执行ping(可编程)需要root权限,因为它需要root访问的raws套接字。 您可以在Gradwohl的代码片段中执行ping操作,但请记住您正在分配一个昂贵(相对)的新进程。 如果你不需要做很多(并发),这肯定会工作:)

要做到这一点在node.js(唯一)没有分叉过程我认为你有几个选项,这是很难实现:()

  1. 重写这个ping python库到node.js,然后以root用户身份运行程序。
  2. 用node.js的 asio c ++库编写node.js的c ++扩展/插件 。 它也有一些如何做icmp ping的例子。

不(仅)使用node.js:

  1. 使用python ping库作为root运行,并通过redis与node.js实例通信。 => EASIEST执行(几乎没有任何工作,但我认为相当快:))
  2. 再次使用asio c ++编写c(++)代码,而不是写node.js扩展通过hiredis与也使用redis的node.js通信。

作为旁注,如何在node.js上使用redis:

我是ping-wrapper的作者。

它产生了ping,你可以立即收听事件。 如果进程退出,它将自动产生。

我知道这个答案已经被回答了一段时间了,但是对于那些正在寻找同样答案的人,我已经在github上写了一个模块来尝试简化它:)

https://github.com/bscarvell/pingwrap

你也可以使用我的nodejs ping包装器。 有一天,我们将在nodejs中获得原始套接字,我们将能够创build自己的ping数据包并对我们的响应时间进行说谎。 😉

这个简单的function应该

  • 做DNS查询
  • 平一次
  • 10秒后超时
  • 沟通所有的好,尽pipe出了ping提供的错误代码
  • 产生一个孩子的过程非婚