Это когда-либо безопасно объединить SELECT (2) и буферизованный IO для ручек файлов?

Я использую 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
    }
}
5
задан Lomky 9 September 2011 в 17:59
поделиться