Возможно ли написать скрипт, определяющий скорость в локальной сети?

D.Lans

Новичок
Возможно ли написать скрипт, определяющий скорость в локальной сети?

В общем сабж.
Если удасться обойтись средствами PHP - это гуд.

Подобный реализован на http://www.hot.ee/vp/
и похоже, что там работает именно клиентский скрипт.
Но скопировать его не представляется возможным (посмотрите код страницы, все закодировано что ли?).
 

Gorynych

Посетитель PHP-Клуба
ну, каков вопрос, таков и ответ:
PHP:
<?php
$targethost = "localhost";

if ( strstr(PHP_OS, "WIN") !== false ) {
        $last_line = exec('ping -n 4 '.$targethost, $retval);
} else {
        $last_line = exec('ping -c 4 '.$targethost, $retval);
}

// Printing additional info
echo $last_line;
?>
 

D.Lans

Новичок
Gorynych
он мне вывел:
ЊЁЁ¬ «м®Ґ = 0¬бҐЄ, Њ ЄбЁ¬ «м®Ґ = 0 ¬бҐЄ, ‘।ҐҐ = 0 ¬бҐЄ

По поводу темы: уточняю, нужно замерить скорость передачи файлов от сервера (с искомым скриптом) к клиенту, обращающемуся к этому серверу.
Если по научному: пропускную способность канала (например - 5 мбит/сек).
 

Gorynych

Посетитель PHP-Клуба
D.Lans а вы посмотрите на вывод в DOS-кодировке, вам станет понятнее, что он вывел. Системный ping "разговаривает" на языке системной локали.

но это не решает вашей "уточненной" темы, потому что скорость получения файла с сервера на клиенте и скорость пинга между компьютерами отнюдь не одно и то же.
 

D.Lans

Новичок
Gorynych
скорость получения файла с сервера на клиенте и скорость пинга между компьютерами отнюдь не одно и то же.
Мне нужно первое. =/
 

baev

‹°°¬•
Команда форума
Но скопировать его не представляется возможным (посмотрите код страницы, все закодировано что ли?).
Вы сами-то до конца код посмотрели?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
http://www.hot.ee/vp/ - JavaScript

ПХП серверный язык. И Вы неможете узнать когда юзер полностью получит полностью ваш тестовый файл, для вычесления Скорости

Можно, конечно и с ПХП что-то выкрутить, но по моему Javascript-ом проще.

Как вариант 2 файла test.php, download_speed.php

Юзер запускает у себя test.ph
в файле
1. Стартуем сессию
2. пишем в сессию время запроса файла
3. Потом много Текстовой информации в файле
4. по onLoad редирект(Джавасриптовый) на download_speed.php&sid=Ай-Ди сессии

В download_speed.php уже всё считаем.

Но это изврат.
 

D.Lans

Новичок
Mr_Max
http://www.hot.ee/vp/ - JavaScript
Как я и думал...

Все становится еще интереснее.
Куда копать к этом случае?
 

Black Raven

Новичок
то что это JS - сомнений нет.

с сессией всё верно, а вот сам тест можно организовать так:

js делает writeln("<script src='...'></script>");
Файл который в src является js, но мы его забиваем фигней размера ради, в самом конце этого файла можно поставить еще один writeln, на следующий файл такого-же плана.

файлики сделать 512Кб например (для локалки размер небольшой, а несколько файлов позволят дать более точный результат)

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

Мы знаем объем переданных данных и приблизительное время, за которое они были переданы...

------

тьфу... сначала написал, потом ссылку посмотрел :)
код не смотрел, но по внешнему виду похоже...
 

D.Lans

Новичок
Black Raven
хм, вариант.
Но пока поищу, может будет что-нибудь уже готовое.

p.s. JavaScript растет в моих глазах. Я думал, на нем только онкликами цвета можно менять. =)

-~{}~ 06.04.07 23:30:

Gorynych
а вы посмотрите на вывод в DOS-кодировке, вам станет понятнее, что он вывел.

Вижу. Сохранил PHP-код, пригодится.
 

D.Lans

Новичок
baev
вроде да.
И?

p.s. Я банально сохранил три странички, участвующие в определении скорости:
speedtest.htm
speed.htm
speed2.htm

запускаю их у себя, нет, так и пишет: "невозможно определить скорость"..
 

D.Lans

Новичок
boombick
пользуюсь.
Но в The BAT.


p.s. Похоже с этим hot.ee мало что получится. Придется писать свое. Пока я вижу проблему в одном:
с сессией всё верно
Я в курсе, как реализовать сессии на PHP. Но как с ними работать в JavaScript - загадка.
 

ksnk

прохожий
Удивлен - при чем тут сессия?
Вот вариант с картинками (Если юзер их не грузит - будут проблемы...) Нужно подставить туда IMG_SIZE - размер картинки и путь до картинки
Код:
function applyFunc(func,b,c)
{
   return function () {func(b,c)};
}
IMG_SIZE=134105; // размер картинки в байтах
var img
(img=new Image()).src='016.jpg?'+100000*Math.random(); // во избежании кеша...
var d=new Date,
    func=applyFunc(function(img,d){
      if(img.complete) {
        var dd = new Date(),delta=dd.getTime()-d.getTime()
        alert('speed is:'+(IMG_SIZE/delta)+
              ' kb/s, time - '+delta+' mks')
      } else {
        setTimeout(func,10);
      }
    },img,d);

func();
Для скриптов - аналогично, только создавать их на несколько операций дольше...

P.S. К PHP это , правда, уже не имеет отношения ;)
 

Black Raven

Новичок
ksnk, никогда не слышал о img.complete - теперь буду знать :) код работает в ИЕ и ФФ - клёво :)
 

D.Lans

Новичок
ksnk
спасибо за подсказку, но...

Первый раз вижу программу, без знака ';' в конце каждой строке. или она почти вся и состоит из одной строки?
Мне хотелось бы модифицировать ее.

Я изменил размер картинки на 1 мегабит (8589934592 байт).
Но я так полагаю, для правдивости вычислений необходимо заменить переменную delta.
Что она означает?

-~{}~ 07.04.07 23:58:

А, проглядел.
По всей видимости - кол-во милисекунд.

А эта программа учитывает задержку исполнения JavaScript'а у клиента?

-~{}~ 08.04.07 00:23:

Еще заметил.
Если выводить данные alert'ом, страница отображает его нормально.
А если выводить writeln()'ом, что предпочтительнее, то полученные данные тоже выводятся, но после этого браузер не перестает что-то загружать с сайта.
То есть потенциальный юзер будет ждать-ждать-ждать, а потом плюнет и уйдет. Нехорошо.

-~{}~ 08.04.07 00:49:

Вроде все.
Сделал рабочий вариант, результаты выводятся в input'ы со скрытыми границами, так что смотрится как обычный текст.
И результаты вроде как правильные.
Но слишком они уж разнятся от раза к разу.
Скорость в локальной сети то
5, то 20, то 30, то 11 мегабит/сек.

Мне сомневаться в скрипте или успокоиться? :)
 
Сверху