Существует ли модуль Perl для проверки скорости интернет-соединения? - PullRequest
4 голосов
/ 25 апреля 2010

Кто-нибудь знает модуль для проверки скорости интернет-соединения?

Ответы [ 2 ]

8 голосов
/ 25 апреля 2010

скорость как в полосе пропускания? Или как в латентном режиме? Для последнего просто используйте Net :: Ping .

Что касается пропускной способности, я не знаю, есть ли что-нибудь готовое, есть 2 подхода:

  1. Вы можете попытаться использовать ibmonitor

  2. В противном случае для измерения пропускной способности загрузки найдите веб-сайт, который позволяет измерять пропускную способность путем загрузки большого файла (или найти такой большой файл на высокопроизводительном сайте); запустите таймер, начните загрузку этого файла (например, используя LWP или любой другой модуль, который вам нужен - или Net :: FTP , если ваш файл находится на сайте FTP) - измерьте, сколько времени это займет и разделите на размер файла.

    Аналогичная логика для измерения пропускной способности при загрузке, но вместо того, чтобы находить большой файл, вам нужно найти место в Интернете (например, общедоступное хранилище), которое позволит загрузить его.

4 голосов
/ 25 апреля 2010
#!/usr/bin/env perl
use warnings; use strict;
use 5.010;
use Time::HiRes qw(gettimeofday tv_interval);
use LWP::Simple;
use File::stat;

my %h = (
    '500x500'   => 505544,
    '750x750'   => 1118012,
    '1000x1000' => 1986284,
    '1500x1500' => 4468241,
    '2000x2000' => 7907740,
);

my $pixel = '1000x1000';
my $url_file = 'http://speedserver/file'.$pixel.'.jpg';
my $file = 'file'.$pixel.'.jpg';

unlink $file or die $! if -e $file;
my $start = gettimeofday;
my $response = getstore( $url_file, $file );
my $end = gettimeofday;

open my $fh, '>>', 'speed_test.txt' or die $!;
    say $fh scalar localtime;
    if ( not is_success $response ) {
        say $fh "error occured:";
        say $fh "HTTP response code = $response";
    }
    else {
        my $size = stat( $file )->size if -e $file;
        $size ||= 0;
        if ( $size == $h{$pixel} ) {
            my $bit = $size * 8;
            my $time = $end - $start;
            my $kbps = int( ( $bit / $time ) / 1000 );
            say $fh "$kbps kbit/s";
            say $fh "$pixel : $size";
        }
        else {
            say $fh "error occured:";
            say $fh "file_size is $size - file_size expected $h{$pixel}";
        }   
    }
    say $fh "";
close $fh;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...