如何从一个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(唯一)没有分叉过程我认为你有几个选项,这是很难实现:()
- 重写这个ping python库到node.js,然后以root用户身份运行程序。
- 用node.js的 asio c ++库编写node.js的c ++扩展/插件 。 它也有一些如何做icmp ping的例子。
不(仅)使用node.js:
- 使用python ping库作为root运行,并通过redis与node.js实例通信。 => EASIEST执行(几乎没有任何工作,但我认为相当快:))
- 再次使用asio c ++编写c(++)代码,而不是写node.js扩展通过hiredis与也使用redis的node.js通信。
作为旁注,如何在node.js上使用redis:
- 从http://redis.io安装redis
- 安装快速的node_redis库
我是ping-wrapper的作者。
它产生了ping,你可以立即收听事件。 如果进程退出,它将自动产生。
我知道这个答案已经被回答了一段时间了,但是对于那些正在寻找同样答案的人,我已经在github上写了一个模块来尝试简化它:)
你也可以使用我的nodejs ping包装器。 有一天,我们将在nodejs中获得原始套接字,我们将能够创build自己的ping数据包并对我们的响应时间进行说谎。 😉
这个简单的function应该
- 做DNS查询
- 平一次
- 10秒后超时
- 沟通所有的好,尽pipe出了ping提供的错误代码
- 产生一个孩子的过程非婚