2010-04-25 69 views

回答

8

速度與帶寬一樣嗎?或者在等待時間?對於後者,只需使用Net::Ping

對於帶寬,我不知道如果有什麼現成的,還有2種方法:

  1. 你可以嘗試利用ibmonitor

  2. 否則,測量的下載帶寬找到一個網站它允許您通過下載大文件來測量帶寬(或在高性能站點上找到這樣一個大文件);啓動計時器,開始下載該文件(例如,使用LWP或任何其他您希望的模塊 - 或Net::FTP,如果您的文件位於FTP站點上) - 測量需要多長時間併除以文件大小。

    用於測量上傳帶寬的類似邏輯,但不需要查找大文件,您需要在互聯網上找到一個允許上傳文件的地方(如公共存儲庫)。

4
#!/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; 
+2

'$ ten'是該變量一個可憐的名字。 – 2010-04-25 14:38:16

+0

這並不容易 - 當我試圖找到好的變量名稱時,它們大都長得很長。 – 2010-04-25 15:14:40

+1

這很簡單。這不是真的十美元,它是$ file_size,或類似的東西。想想它代表什麼,而不是它是什麼。 – 2010-04-25 22:58:15