Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.08;
Скачать: CL | DM;

Вниз

Каким образом ограничивается скорость скачки на стороне клиента?   Найти похожие ветки 

 
Дмитрий С ©   (2011-01-25 12:05) [0]

Например:

С помощью менеджера закачки начинаю загрузку некого файла с сервера. Скорость подключения, к примеру, 10МБайт/сек, сервер специально не ограничивает скорость.

Начинается скачка со скоростью около 10МБайт/сек.

В менеджере загрузок устанавливаю ограничение скорости загрузки, например, 2 МБайт/с.

Вопросы: Каким способом клиент ограничивает скорость приема? Каким образом сервер узнает о том, что нужно по-медленнее отдавать?

Или просто клиент начинает реже делать recv, а сервер получает дополнительные "отлупы" при выполнении send ?


 
Anatoly Podgoretsky ©   (2011-01-25 12:19) [1]

> Дмитрий С  (25.01.2011 12:05:00)  [0]

Запрашивая данные раз в секунду порциями по 2 мБ


 
Slym ©   (2011-01-25 12:45) [2]

Anatoly Podgoretsky ©   (25.01.11 12:19) [1]
запрашивая данные раз в 1/n секунд порциями размера n*Speed


 
Inovet ©   (2011-01-25 14:26) [3]

Мне другое интересно. Вот пользовался я много времени FlashGet, он умеет работать прозрачно, так что его не чувствуешь - качает на максимальной скорости, как только кто-то полез куда, отдаёт ему сколько надо. Потом FlashGet стал в другом нехороший, поставил я Download Master, всем он хорош, а вот такой фичи с автоматической скоростью нет - только вручную менять, вернее есть там авто, если включить, но она снижает до совсем мало и оставляят так, назад не возвращает. То же самое и uTorrent.

Что мешает сделать аналогично FlashGet?


 
Smile   (2011-01-25 14:39) [4]

> Inovet ©   (25.01.11 14:26) [3]

До сих пор пользуюсь FlashGet


 
Palladin ©   (2011-01-25 17:16) [5]

До сих пор пользуюсь ReGet


 
KSergey ©   (2011-01-25 17:27) [6]

До сих пор пользуюсь IE6


 
Inovet ©   (2011-01-25 17:34) [7]

> [4] Smile   (25.01.11 14:39)
> До сих пор пользуюсь FlashGet

> [5] Palladin ©   (25.01.11 17:16)
> До сих пор пользуюсь ReGet

ReGet не знаю, а те версии FlashGet, что на их сайте, какие-то глючные стали и лазят постоянно по непонятным адресам в Инете, и всё по новым. А инсталяцию предыдущих версий я потерял, вот и стал смотреть что советуют, вроде ДМ всё больше, поставил - нормальный 0 показал ненавязчиво рекламму на прогрессбаре и всё, вот только скорость вручную крутить как-то неудобно да и неправильно. Наверно не всё так просто.


 
Дмитрий С ©   (2011-01-25 18:33) [8]


> Запрашивая данные

Это понятно. Но как это реализуется на уровне tcp, ip или чего там еще?
Разве сервер ждет каких то запросов данных?


 
Сергей М. ©   (2011-01-26 10:14) [9]


> как это реализуется на уровне tcp, ip


Никак. Шейпер работает уровнем выше - на прикладном уровне.


> сервер ждет каких то запросов данных?


А ты думаешь он по собственной инициативе начинает пхать клиенту поток данных ?)

Клиент раз в секунду спрашивает : сервер, дай мне очередной 1 кбайт
Сервер раз в секунду отвечает: на тебе, клиент, твой очередной килобайт.
Результат: 1 кб/сек

Клиент раз в пол-секунды спрашивает : сервер, дай мне очередной 1 кбайт
Сервер раз в пол-секунды отвечает: на тебе, клиент, твой очередной килобайт.
Результат: 2 кб/сек


 
han_malign   (2011-01-26 10:31) [10]


> Но как это реализуется на уровне tcp, ip или чего там еще?


GET ... HTTP/1.1
If-Range: ...

HTTP/1.1 206 Partial Content
Content-Range: ...


 
Дмитрий С ©   (2011-01-26 10:39) [11]


> Сергей М. ©   (26.01.11 10:14) [9]

Уже становится понятнее.
Немного отойдем от темы качалок: Сервер и клиент, соединение установлено. Клиент не читает ничего (например пока занят обработкой предыдущих данных), а сервер посылает килобайт клиенту. В таком случае где храниться этот килобайт?


 
Сергей М. ©   (2011-01-26 11:33) [12]


> где храниться этот килобайт?


В буфере приема сокета.
Как только клиент освободится, он обращается к сокету "дай столько-то принятых от партнера данных, если таковые на сей момент есть", сокет берет из своего буфера данные и отдает клиенту.


 
DiamondShark ©   (2011-01-26 12:54) [13]

Без QoS -- туфта все эти ограничения, типа: "раз в секунду дай столько-то".


 
Сергей М. ©   (2011-01-26 13:46) [14]

Без приличного автономного устройства, сочетающего в себе функц-ть файрвола, роутера, прокси и пр. и  пр. туфта все эти QoS и прочие извращения, ибо приличный автономный дивайс как правило содержит приличный шейпер, работающий на транспортном и ниже уровнях.


 
Andy BitOff ©   (2011-01-26 14:00) [15]

А без компьютера и это все туфта =)


 
KSergey ©   (2011-01-26 14:06) [16]

> Andy BitOff ©   (26.01.11 14:00) [15

а без электричества - и компьютер не  поможет.

Про QoS
Скажите, я правильно понимаю, что если хоть одно устройство по пути следования траффика этот самый QoS не поддерживает - то в итоге QoS не работает? или ошибаюсь?


 
Сергей М. ©   (2011-01-26 14:09) [17]


> без компьютера и это все туфта


Угу.
Все фигня кроме пчел, да и пчелы тоже фигня)


 
DiamondShark ©   (2011-01-26 14:35) [18]

Всё туфта без полноценной поддержки RFC-2324.


> приличный шейпер, работающий на транспортном и ниже уровнях.

Приличный шейпер, работающий на уровне ниже транспортного, должен содержать бесконечный объём памяти.


 
Dimka Maslov ©   (2011-01-26 21:04) [19]

При запросе клиентом при вызове сокетной функции recv в неё передаётся размер приёмного буфера. Если сервер передаёт больший объём данных - буфер заполняется и функция возвращает его размер в этом случае клиент должен скопировать данные и снова вызвать функцию recv. Если сервер передал меньший объём информации возврат из функции recv не производится. По истечении тайм-аута или явного разрыва соединения работа recv прекращается и функция возвращает число, меньшее указанного размера буфера. При этом клиент должен считать, что закачка завершена и закрыть сокет. Ограничить скорость закачки можно введением пауз после каждого последующего вызова recv. Всяческими инкапсулирующими сокеты прибамбахами сделать это нельзя, если это не заложено в функционал изначально.


 
Сергей М. ©   (2011-01-26 22:52) [20]

> Dimka Maslov ©   (26.01.11 21:04) [19]

> Если сервер передал меньший объём информации возврат из
> функции recv не производится


Ты эту траву больще не кури).. и других ею тоже не угощай)


 
Дмитрий С ©   (2011-01-27 09:05) [21]


> Dimka Maslov ©   (26.01.11 21:04) [19]

Это то понятно. Непонятно что будет происходить, если сервер передает данные, а клиент не делает recv.


> Сергей М. ©   (26.01.11 22:52) [20]

В чем он не прав? Все правильно вроде.


 
Сергей М. ©   (2011-01-27 09:42) [22]


> В чем он не прав?


В том что:

1. После установления соединения нет ни сервера ни клиента  - есть равноправные партнеры по соединению.

2. Если партнер таки передал некий (пусть даже меньший ожидаемого) объём информации, возврат из функции recv производится
.
recv висит только в случае если партнер молчит, т.е. в случае когда на момент вызова recv буфер приема гнезда пуст и нет признака штатного либо аварийного разрыва петли соединения.


 
Anatoly Podgoretsky ©   (2011-01-27 10:37) [23]

> Дмитрий С  (27.01.2011 09:05:21)  [21]

> если сервер передает данные, а клиент не делает recv

Сервер отвалится по ошибке.
Это же обычная ситуация, миллиарды таких случаев каждый день.


 
DiamondShark ©   (2011-01-27 11:13) [24]


> Anatoly Podgoretsky ©   (27.01.11 10:37) [23]


> > если сервер передает данные, а клиент не делает recv
> Сервер отвалится по ошибке.

НетЪ.
Сервер МОЖЕТ отвалиться по ошибке, но не обязательно.


> Dimka Maslov ©   (26.01.11 21:04) [19]


> При этом клиент должен считать, что закачка завершена и
> закрыть сокет.

Это бред.

На одной стороне я выставляю опцию TCP_NODELAY и передаю данные кусками разной длины, но не больше чем по 666 байт за раз.
На другой стороне я читаю данные буферами по 4 КБ.
При этом, где-то между участниками обмена стоит хитровыпендренная девайсина, которая полностью переформатирует поток в равные сегменты по 512 байт.

Участники обмена никогда не могут быть уверены, какими порциями они будут получать данные.



Страницы: 1 вся ветка

Текущий архив: 2011.05.08;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.007 c
2-1296638668
Godod
2011-02-02 12:24
2011.05.08
Ошибка access violation at adress


15-1295598707
12
2011-01-21 11:31
2011.05.08
Помогите правильно написать на немецком


3-1257918283
Alshtam
2009-11-11 08:44
2011.05.08
Сравнение баз данных


15-1295421443
Unknown_user
2011-01-19 10:17
2011.05.08
Изменение структуры БД


2-1296564138
Сергей
2011-02-01 15:42
2011.05.08
Как расширить атрибуты файла?