Я использую IO :: Выберите, чтобы отслеживать переменное количество ручек файлов для чтения. Документация, которую я сталкиваюсь, настоятельно рекомендуется не объединять оператор SELECT с помощью <> (readline) для чтения из файловых ручек.
Моя ситуация:
Я когда-либо использую только каждый обратный файл один раз, то есть когда выберите, предлагает мне дескриптор файла, он будет полностью использован, а затем удален из выбора. Я буду получать хеш и переменное количество файлов. Я не против, если эти блоки на некоторое время.
Для получения более контекста я являюсь клиентом, отправляя информацию, которая будет обработана моими серверами. Каждая обработка файлов - это другой сервер, с которым я говорю. Как только сервер закончен, результат HASH будет отправлен мне от каждого. Внутри этого хеша является числом, указывающим количество файлов для последующих.
Я хочу использовать readline для интеграции с существующим кодом проекта для передачи объектов и файлов PERL.
Образец кода:
my $read_set = IO::Select()->new;
my $count = @agents_to_run; #array comes as an argument
for $agent ( @agents_to_run ) {
( $sock, my $peerhost, my $peerport )
= server($config_settings{ $agent }->
{ 'Host' },$config_settings{ $agent }->{ 'Port' };
$read_set->add( $sock );
}
while ( $count > 0) {
my @rh_set = IO::Select->can_read();
for my $rh ( @{ $rh_set } ) {
my %results = <$rh>;
my $num_files = $results{'numFiles'};
my @files = ();
for (my i; i < $num_files; i++) {
$files[i]=<$rh>;
}
#process results, close fh, decrement count, etc
}
}