PDA

Просмотр полной версии : Прогресс приема и передачи (!) данных


$mival
26.10.2007, 23:50
Нужно принять некоторое количество данных (к примеру XML) с URL (при этом слушать прогресс загрузки) и после полной загрузки передать их на другой URL (тоже с прослушкой прогресса).

Конечной целью является замер скорости приема и передачи на машине клиента (который грузит флеш).

С приемом вопросов нет, вот как быть с передачей? Как обрабатывать прогресс?

ALiEN_
26.10.2007, 23:57
А в чем именно загвоздка?

$mival
27.10.2007, 00:23
А в чем именно загвоздка?
в том что у встроенных классов нет событий, которые бы позволяли слушать прогресс отправки. Или я не внимательно читал Help?

BlooDHounD
27.10.2007, 00:58
слушать прогресс отправки флэш не умеет, так как отправкой занимается не он а система. он лиш отдаёт данные системе. происходит это почти мнгновенно. поэтому и прогресса нету. прогресс приёма отслеживается только потому что система не умеет забирать данные мгновенно.

ALiEN_
27.10.2007, 01:44
А зачем нам прогресс?! Мы просто отправляем n байт на сервер, за время t - получаем в итоге скорость выгрузки. Или я чего то не понимаю?

Нужно что ли реалтайм показывать сколько уже выгрузилось?

P.S. FileReference - при аплоаде дает смотреть прогресс кстати!

$mival
27.10.2007, 12:05
Нужно что ли реалтайм показывать сколько уже выгрузилось?
смотри: вот здесь (http://speedtest.net/) (speedtest.net) показывается исходящая и входящая скорость реалтайм, т.е. в ходе всего измерения показывается средняя скорость. Фактически требуется создать аналог этого.

А зачем нам прогресс?! Мы просто отправляем n байт на сервер, за время t - получаем в итоге скорость выгрузки. Или я чего то не понимаю?

как сказал BlooDHounD, это время t будет стремиться к нулю.

P.S. FileReference - при аплоаде дает смотреть прогресс кстати!
если ты успел посмотреть ссылку выше, то наверное заметил, что участие клиента там минимальное. Он всего лишь кликает по серваку, с которым будет общаться клиент, а FileReference без диалога с клиентом не работает.

Что-то мне подсказывает что на speedtest.net одним флешем не обошлись!

Nirth
27.10.2007, 13:45
Что-то мне подсказывает что на speedtest.net одним флешем не обошлись!
Да конечно, флэш там занимаеться только выводом данных.

Xelat
27.10.2007, 14:57
А не может быть так, что это манипуляция таймштампами? Т.е. тупо замеряется время отправки.
Скажем сервер при формировании XML'ки по запросу добавляет в неё текущий штамп времени, затем флэшка добавляет к этому числу время загрузки, и отправляет это всё обратно на сервак, где он смотрит разницу во времени, и отдаёт обратно ответ о скорости аплоада.

ALiEN_
27.10.2007, 15:44
А не может быть так, что это манипуляция таймштампами? Т.е. тупо замеряется время отправки.


Нет, по ссылке смотри - скорость отображается в реалтайме.


В этом (http://speedtest.net/) примере флешка только как оболчка, это точно.

etc
27.10.2007, 16:18
А по сокету всякую билиберду отправлять?

$mival
27.10.2007, 16:37
Class XMLSocket
...
- progressHandler(): listens for the progress events, dispatched when a call to send() has been made and while the send is ongoing.
т.е. этот слушатель покажет нам прогресс отправки всякой билиберды ?

etc
27.10.2007, 16:39
Ну отправляем, скажем, пакеты по 1024 байт и засекаем время отправки.
Как-то так. Даже сервер может просто открытый порт держать и все.
Во внутренностях той флешки не копался, ибо лень.

BlooDHounD
27.10.2007, 17:37
сокет не будет мониторить данные :) все евенты прогрессов во флэше это прогрессы прихода данных а не ухода :) флэш отправляет данные мгновенно. он не знает ничего про скорость твоего коннекта. он просто посылает данные в очередь на отправку.

$mival
27.10.2007, 20:11
...все евенты прогрессов во флэше это прогрессы прихода данных а не ухода :) ...
за исключением FileReference, конечно :away:

ALiEN_
27.10.2007, 20:29
=))

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

Берем большое известное колличество данных и начинаем слать на сервер.

Между тем, делая постоянные запросы к серверу, на получение уже загруженного колличества данных. Отсюда реалтайм вычисляем.

$mival
27.10.2007, 20:52
=))

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

Берем большое известное колличество данных и начинаем слать на сервер.

Между тем, делая постоянные запросы к серверу, на получение уже загруженного колличества данных. Отсюда реалтайм вычисляем.
хехе
не факт что "запросы на получение уже загруженного колличества данных" пробьются во время "постоянные запросы к серверу", которые, по идее, должны вообще забить канал на максимум чтоб измерить его скорость :)

ALiEN_
28.10.2007, 01:43
Исходящий канал, да, но входящий нет. Стоит поробовать все таки =) Еще есть варианты с использованием яваскрипта, просто нужно погуглить ... 8)))