检查几种不同的 TCP/IP 服务的可用性?



假设我有一个主机名和端口的列表,并非所有主机名和端口都与HTTP相关。

var config = {
"checks": [
{
"name": "NPM",
"hostname": "npmjs.com",
"port": 80
},
{
"name": "AWS",
"hostname": "aws.amazon.com",
"port": 443
},
{
"name": "RabbitMQ",
"hostname": "merry-butterfly.rmq.cloudamqp.com",
"port": 5671
}
]
}

测试是否可以访问这些服务的有效方法是什么?我的第一个想法是使用典型的类似telnet的方法,我这样做了:

var telnet = require('telnet-client')
config.checks.forEach(function(check) {
var connection = new telnet()
var params = {
host: check.hostname,
port: check.port,
negotiationMandatory: false
}
connection.on('connect', function() {
connection.send('GET /', {
ors: 'rn', 
waitfor: 'n'
}, function(err, data) {
console.log(err, data);
connection.end()
})
})
connection.connect(params)
results.push(result);
});

以上似乎有效,但我实际上不确定要向每个单独的服务发送哪些数据才能返回表明该服务"可访问"的响应,我不需要对服务进行身份验证或执行任何操作,只需检查是否可以访问即可。此外,如果无法访问 DNS,它会引发异常:

Error: getaddrinfo ENOTFOUND merry-butterfly.rmq.cloudamqp.com/api merry-butterfly.rmq.cloudamqp.com/api:443

处理错误和异步测试"检查"列表中的每个条目的适当方法是什么?

ping 主机。

https://www.npmjs.com/package/ping

例如:

var ping = require('ping');
var hosts = ['192.168.1.1', 'google.com', 'yahoo.com'];
hosts.forEach(function(host){
ping.sys.probe(host, function(isAlive){
var msg = isAlive ? 'host ' + host + ' is alive' : 'host ' + host + ' is dead';
console.log(msg);
});
});

最新更新