Для большого набора данных домена это будет сделано быстро, без необходимости анализировать результаты; IP всегда будет в $results{$domain}[0][4]
. Это не один запрос, но они будут выполняться одновременно (не более 10 запросов одновременно), поэтому они будут выполнены быстро. Просто убедитесь, что у оператора DNS-сервера нет проблем с таким количеством запросов за короткий период.
use AnyEvent::DNS;
use Data::Dumper;
my @domains = qw/google.com/;
my $resolver = AnyEvent::DNS->new( server => '8.8.4.4' );
my %results;
### Set up the condvar
my $done = AE::cv;
$done->begin( sub { shift->send } );
for my $domain (@domains) {
$done->begin;
$resolver->resolve($domain, 'a', sub {push @{$results{$domain}}, \@_; $done->end;});
}
### Decrement the cv counter to cancel out the send declaration
$done->end;
### Wait for the resolver to perform all resolutions
$done->recv;
print Dumper \%results;
Выходы:
$VAR1 = {
'google.com' => [
[
'google.com',
'a',
'in',
300,
'74.125.225.52'
],
[
'google.com',
'a',
'in',
300,
'74.125.225.50'
],
[
'google.com',
'a',
'in',
300,
'74.125.225.49'
],
[
'google.com',
'a',
'in',
300,
'74.125.225.48'
],
[
'google.com',
'a',
'in',
300,
'74.125.225.51'
]
]
};