我想从我的node.js应用程序中ping一台服务器。
这可行吗?
谢谢
我想从我的node.js应用程序中ping一台服务器。
这可行吗?
谢谢
你可以使用exec
来调用系统的ping命令。
var exec = require('child_process').exec;
exec("ping -c 3 localhost", function (err, stdout, stderr) {
console.log(stdout);
});
node-net-ping 是一个非常棒的模块,它使用原始套接字。
而且,如果你只需要原始套接字,同样的开发者也有一个适用于此的模块:node-raw-socket。
我是ping-wrapper的作者。
它会自动启动ping进程,并且你可以立即监听事件。如果进程退出,它将自动重新启动。
npm install --save ping-wrapper
。 - mixdev进行ping(可编程)需要root权限,因为它需要原始套接字,这需要root访问权限。您可以按照 Gradwohl's片段执行ping,但请记住,这将分叉一个新进程,这是昂贵的(相对而言)。如果您不需要频繁执行(并发),那么这肯定有效:)
在仅使用node.js的情况下执行此操作,我认为您有几个选项,这两个选项都很难实现:(
不仅限于使用node.js:
顺便提一下如何在node.js上使用redis:
有几种方法可以做到这一点。最简单的方法是使用 ping
命令。您可以通过使用 child_process
模块来实现。
const { spawnSync } = require('child_process');
const os = require('os');
// Windows: ping -n 1 HOSTNAME
// Linux: ping -c 1 HOSTNAME
function pingHostname(hostname) {
const result = spawnSync('ping', os.platform() === 'win32' ? ['-n', '1', hostname] : ['-c', '1', hostname]);
return result.stdout.toString().includes('Reply from');
}
或者你可以使用net
模块来ping一台服务器。
const net = require('net');
async function pingHostname(hostname) {
return new Promise((resolve, reject) => {
const socket = net.createConnection(80, hostname);
socket.setTimeout(3000);
socket.on('connect', () => {
socket.end();
resolve(true);
});
socket.on('timeout', () => {
socket.destroy();
resolve(false);
});
socket.on('error', () => {
socket.destroy();
resolve(false);
});
});
}
它运行良好,
const { exec } = require("child_process");
exec("ping -c 10 google.com", (error, stdout, stderr) => {
if (error) {
console.log(`error: ${error.message}`);
return;
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return;
}
console.log(`stdout: ${stdout}`);
});