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

don*_*ald 46 node.js

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

那可行吗?

谢谢

Nik*_*ohl 26

您可以使用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);
Run Code Online (Sandbox Code Playgroud)

  • 你可以这样做.但是如果你做了很多(同时)它将会很昂贵,因为分离过程是昂贵的(相对). (9认同)
  • sys 现已弃用 (2认同)

umu*_*utm 21

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

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

  • @OlivUtilo Ping是ICMP协议的一部分,该协议没有端口的概念。 (4认同)
  • @Bach您可以使用 [`dns.resolve()`](https://nodejs.org/api/dns.html#dnsresolvehostname-rrtype-callback) 自己解析域 (2认同)

Alf*_*red 9

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

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

  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实例通信.=> 最容易实现.(几乎没有任何工作,但我认为相当快:))
  2. 使用asio c ++再次编写c(++)代码,但不是编写node.js扩展,而是通过hiredis与node.js进行通信,node.js也使用redis.

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


lan*_*vel 9

我是ping-wrapper的作者.

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