代码之家  ›  专栏  ›  技术社区  ›  sid_com

有没有一个Perl模块来测试互联网连接速度?

  •  4
  • sid_com  · 技术社区  · 15 年前

    有人知道测试网速的模块吗?

    2 回复  |  直到 15 年前
        1
  •  8
  •   Community CDub    5 年前

    速度和带宽一样?或者说是延迟?对于后者,只需使用 Net::Ping

    对于带宽,我不知道是否有现成的,有两种方法:

    1. 你可以试着利用 ibmonitor

    2. 否则,要测量下载带宽,请找到一个允许您通过下载大文件来测量带宽的网站(或在高性能网站上找到如此大的文件);启动计时器,开始下载该文件(例如使用 LWP Net::FTP

      类似于测量上传带宽的逻辑,但不是查找大文件,而是需要在internet上找到一个允许上传文件的位置(如公共存储库)。

        2
  •  4
  •   sid_com    15 年前
    #!/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;