Как я могу ограничить загрузку в программе Perl? - PullRequest
2 голосов
/ 12 февраля 2009

Есть ли какой-нибудь Perl-модуль, доступный для регулирования загрузки? Я хотел бы загрузить определенный файл, но ограничить скорость загрузки определенным количеством килобайт в секунду.

Ответы [ 2 ]

6 голосов
/ 12 февраля 2009

Похоже, что WWW :: Curl и CURLOPT_MAX_RECV_SPEED_LARGE опция что ты хочешь:

#!/usr/bin/env perl

use strict;
use warnings;
use feature ':5.10';
use WWW::Curl::Easy;

# Setting the options
my $curl = WWW::Curl::Easy->new;

$curl->setopt(CURLOPT_HEADER,1);
$curl->setopt(CURLOPT_URL, 'http://www.google.com');
$curl->setopt(CURLOPT_MAX_RECV_SPEED_LARGE, 1);

my $response_body;
open my $fh, ">", \$response_body or die; # presumably this can be a real file as well.
$curl->setopt(CURLOPT_WRITEDATA,$fh);

my $ret = $curl->perform;
die 'Error: '. $curl->strerror($ret) if $ret;

my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
say "Received response: $response_body";

В этом примере мы загружаем Google со скоростью один байт в секунду. Очень медленно.

3 голосов
/ 12 февраля 2009

Методика, не ограниченная Perl и не ограниченная конкретным протоколом, заключается в использовании trickle :

trickle - это портативный и легкий формирователь полосы пропускания для пользователей. Он может работать в совместном режиме (вместе с ручным режимом) или в автономном режиме.

См. Также Как регулировать пропускную способность соединения с сокетом в C?

Было бы неплохо упаковать эту технику в модуль Perl (например, подклассы IO :: Handle), но я не знаю ни одного.

...