Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка скорости интернета (загрузка-выгрузка), возможно ли реализовать на Perl 
:(
    Опции темы
wolter
Дата 26.1.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Хотелось бы написать небольшую программуленьку (допустим в консольном ворианте) которая проверяла ла бы скорость интернета 
скорость загрузки файла и выгрузки
приверно так как это сделанно на http://2ip.ru
собственно кроме того как сделать проверку пинга в модулях по моей теме ничего не нашел, подскажите куда рыть)
PM MAIL   Вверх
tolkien
Дата 27.1.2009, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



Это легко. Скорость находится по формуле
$v = $count / $t; #скорость байт/c 
$count - кол. полученных байт
$t - время за которое получены $count.
PM MAIL   Вверх
wolter
Дата 27.1.2009, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



ну а както в примере это можно увидеть. а то я чтото не очень понял эту формулу, точнее вообще не понял smile 
я имею введу именно как в перл это реализовать чтобы что то на что то поделить это надо сначало получить вопрос как...

Это сообщение отредактировал(а) wolter - 27.1.2009, 10:12
PM MAIL   Вверх
gcc
Дата 27.1.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



я видел скрипт который пишет сколько времени осталось до конца загрузки и скорость, перл + аякс...

то есть тогда когда файл начинает закачиватся оставить таймер, конгда закончит, то определить время сколько пршло...

Добавлено @ 10:26

www.perlmonks.org/?node_id=588964
    
Web Browser File Upload Progress Bar in Perl w/AJAX 


Это сообщение отредактировал(а) gcc - 27.1.2009, 10:27
PM WWW ICQ Skype GTalk Jabber   Вверх
wolter
Дата 27.1.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



gcc, спасибо, но, это тоже немного не то, вот допустим есть модуль Net::Ping с помошью него можно сделать обычный пинг, это мне подходит потому как это работает в консоли и все на ура, но вот как допустим просто проверить скорость интернета, в сети полно ресурсов где это можно сделать вопрос в том как они это сделали и как это сделать в консоли на перле
PM MAIL   Вверх
wolter
Дата 27.1.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



и тишина....
PM MAIL   Вверх
shamber
Дата 27.1.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



wolter, вы как всегда очень спешите smile в консоле это делается также как и в другом месте. 
для проверки скорости upload и download вам нужно:
1 найти место откуда вы будете файл скачивать
2 найти место куда вы будете файл закакчивать
Если у вас есть свой хостинг то эти два вопроса решаются очень просто smile

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


PM MAIL Jabber   Вверх
wolter
Дата 27.1.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



shamber, а Вы все как всегда расстовляете на свои места, кстати спасибо вам за это, да хостинг свой есть, вориант который предложил  tolkien, я если честно не понял, мнебы хоть какойто пример, smile , потому как я так и не понял где прать сами данные которые потом делитьнадо друг на друга, кстати заодно интиресно узнать как указанный мой ресурс в пермом посте определяет среднию скорость интернета
PM MAIL   Вверх
shamber
Дата 27.1.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



wolter, простой пример для определения скорости download
Код

#!/usr/bin/perl -w
use strict;
my $url = 'xxx';# здесь указываете ссылку что скачивать, желательно чтобы файлик был около 1 мб(для чистоты эксперимента :) )
    use Time::HiRes qw/gettimeofday tv_interval/;
  use LWP::UserAgent;
 
 my $ua = LWP::UserAgent->new;
 $ua->timeout(10);
my $sizerequest = $ua->head( $url );#делаем запрос размера файла
my $size = $sizerequest->header('content_length'); #получаем размер в байтах
my $bytes = '102400';#используем для подсчета скорости
   my $t0 = [gettimeofday];
   my $t1 = [gettimeofday];

   my $response = $ua->get($url,':content_cb' => \&callback,':read_size_hint' => $bytes); #указываем что будем вызывать функцию callback каждые $bytes байт
 if ($response->is_success) {
     my $elapsed = tv_interval ( $t0 );
     my $speed = $size/$elapsed;# считаем среднюю скорость
print $speed."\n";
 }
 else {
     die $response->status_line;
 }

sub callback{
    #функция вызывается каждыq раз когда скачано $bytes
    my $elapsed = tv_interval ( $t1 ); 
    my $speed = $bytes/$elapsed;
    print $speed."b/sec\n";
    $t1 = [gettimeofday];
}

только не запутайтесь с размерностью.

А после того, как скачали файл, его точно также uploadите и получаете скорость upload. вот и все дела

Добавлено @ 22:53
и 2ip.ru точно также и измеряет, сначала скачивает файл, а потом закачивает и так и подсчитывает. 

Это сообщение отредактировал(а) shamber - 27.1.2009, 23:17
PM MAIL Jabber   Вверх
wolter
Дата 28.1.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



shamber, Как всегда должен Вам выразить свою презнательность и сказать Вам огромное спасибо, стар положен, теперь буду копать копать и еще раз копать ))))
PM MAIL   Вверх
wolter
Дата 28.1.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



shamber, наверно я что то всетоки напутал после запуска у меня появляеться много групп цифр, берем серденее 
9348183.31203213b/sec
округляем
9348183b/sec
делем это число на 1024 дабы получить Kb/sec
в итоге получаем число грубо говоря 9129 (уже немного странно)
идем еще дальше умножаем полученное число на 8 дабы узнать Kbps
получаем грубо говоря 73032Kbps
далее делем это на 1024 дабы получить Мbps
получаем грубо говоря 71,3Мbps
и это при реальной скорости интернета гдето 1.8Мbps
вопрос где и что я напутал?
PM MAIL   Вверх
shamber
Дата 28.1.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Что-то тут не так smile 
Давайте откажемся от фишки с callback
Код

use Time::HiRes qw[ time ];
use LWP;
my $url = 'http://www.mirrorservice.org/sites/ftp.cpan.org/pub/CPAN/authors/id/B/BZ/BZAJAC/Apache-ConfigParser-1.01.tar.gz';
my $uaw = LWP::UserAgent->new;
 $uaw->timeout(10);
   my $t0 = time;

   my $response = $ua->get($url);
 if ($response->is_success) {
     my $elapsed = time() - $t0;
     
     my $speed = length($response->content)/$elapsed;
     print "\n Speed  $speed bytes/sec by download ".length($response->content)." bytes"
    
 }
 else {
     die $response->status_line;
 }

Speed 28610.2751232511 bytes/sec by download 201739 bytes Вообщем для меня нормальная скорость smile


Это сообщение отредактировал(а) shamber - 28.1.2009, 14:55
PM MAIL Jabber   Вверх
shamber
Дата 28.1.2009, 15:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Все нашел свой косяк. ДЛя того чтобы работал первый варинат нужно кое-что исправить smile
Код

use strict;
use Time::HiRes qw[ time ];
use LWP;


my $url = 'http://www.mirrorservice.org/sites/ftp.cpan.org/pub/CPAN/authors/id/B/BZ/BZAJAC/Apache-ConfigParser-1.01.tar.gz';
 
 my $ua = LWP::UserAgent->new;
my $bytes = '102400';#используем для подсчета скорости
   my $t0 = time;
   my $t1 = time;
   my $file;# здесь храним содержимое
 
   my $response = $ua->get($url,':content_cb' => \&callback,':read_size_hint' => $bytes);
 if ($response->is_success) {
     my $elapsed = time() - $t0;
     my $speed = length($file)/$elapsed;
     print "\n Speed in $speed bytes/sec by download".length($file)."bytes"
    
 }
 else {
     die $response->status_line;
 }

sub callback{
    my ($data)=@_; # нужно было просто проверять, сколько было скачано за каждый раз, а не как я думал $bytes
    my $elapsed = time()- $t1;
    $file .=$data;
    my $speed = length($data)/$elapsed;
    print $speed."bytes/sec\n";
    $t1 = time();
}
 
PM MAIL Jabber   Вверх
wolter
Дата 28.1.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



shamber, Сейчас буду это опкапывать ) спасибо Вам ) кстати вопрос, так идет подсчет средней скорости, а как допустим вичислить максимальную или среднию, я простоне понял как работает формула ?
PM MAIL   Вверх
shamber
Дата 28.1.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Цитата(wolter @  28.1.2009,  15:27 Найти цитируемый пост)
 я простоне понял как работает формула

wolter, смотрите..... 
Что такое скорость скачивания?
это количество скаченных байтов в секунду, правильно? Об этом размерность bytes/sec говорит? Вот так формула и работает

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


PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0664 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.