如何从Node.js应用程序“Ping”?

时间:2011-01-19 15:31:02

标签: node.js

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

可行吗?

由于

6 个答案:

答案 0 :(得分:21)

您可以使用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);

答案 1 :(得分:20)

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

而且,如果您只寻找原始套接字,那么同一个开发人员也有一个模块:node-raw-socket

答案 2 :(得分:9)

执行ping(可编程)需要root权限,因为它需要root访问权限的原始套接字。您可以在Gradwohl's代码段之后执行ping操作,但请记住,您正在分配一个昂贵的(相对)新流程。如果你不需要做很多事情(并发),那肯定会有效:)

要在node.js中执行此操作(仅限)而不使用forking进程我认为您有两个选项,这两个选项都难以实现:()

  1. 将此ping python library重写为node.js,然后以root用户身份运行程序。
  2. 使用c++ extension/addon for node.js为node.js写一个asio c++ library它还有几个例子icmp ping
  3. 不(仅)使用node.js:

    1. 使用python ping library以root身份运行并通过redis与node.js实例通信。 => EASIEST实施。(几乎没有任何工作,但我认为相当快:)
    2. 使用asio c ++再次编写c(++)代码,但不是编写node.js扩展,而是通过hiredis与node.js进行通信,node.js也使用redis。
    3. 作为旁注,如何在node.js上使用redis:

答案 3 :(得分:9)

我是ping-wrapper的作者。

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

答案 4 :(得分:3)

我知道很久以前就已经回答了这个问题,但是对于那些正在寻找相同答案的人,我已经在github上编写了一个模块来尝试简化它:)

https://github.com/bscarvell/pingwrap

答案 5 :(得分:2)

您也可以使用我的nodejs ping wrapper yaping。有一天,我们将在nodejs中获得原始套接字,我们将能够制作自己的ping数据包,并对我们的响应时间撒谎。 ; - )

这个简单的功能

  • 执行dns查找
  • ping一次
  • 10秒后超时
  • 通过ping提供的错误代码
  • 进行通信
  • 产生一个非婚生子女处理