我想从我的 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,您可以立即监听事件。如果进程退出,它将自动生成。
执行 ping(可编程)需要 root 权限,因为它需要需要 root 访问权限的原始套接字。您可以按照 Gradwohl's 代码片段执行 ping,但请记住,您正在分叉一个新进程,该进程相对昂贵。如果你不需要做很多事情(并发),这肯定会起作用:)
要在node.js(仅)中执行此操作而无需分叉过程,我认为您有几个选项,但都很难实现:()
不(仅)使用node.js:
作为旁注,如何在 Node.js 上使用 Redis:
您还可以使用我的nodejs ping 包装器yaping。有一天,我们将在 Nodejs 中获得原始套接字,并且我们将能够制作自己的 ping 数据包并谎报我们的响应时间。 ;-)
这个简单的功能应该
这是一个关于如何使用
node:net
模块创建 TCP 连接并 ping 主机的基本示例。
import { createConnection } from 'node:net';
/**
* Ping a given host and resolve with the response time in milliseconds,
* or -1 if there was an error.
*/
async function ping(hostname, port = 80, timeout = 3000) {
return new Promise((resolve) => {
const start = performance.now();
const socket = net.createConnection(port, hostname);
socket.setTimeout(timeout);
socket.on('connect', () => {
const end = performance.now();
socket.end();
resolve(end - start);
});
function handleError() {
socket.destroy();
resolve(-1);
}
socket.on('timeout', handleError);
socket.on('error', handleError);
});
}
console.log(await ping('stackoverflow.com'));
此外,还有另一种方法可以使用
node:child_process
模块来完成此操作,但不建议这样做,因为它可以
在某些情况下相当昂贵。
工作正常,
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}`);
});