Почему передача HTTP через wget будет быстрее, чем через lftp/pget?

Я создаю программное обеспечение, которое должно выполнять передачу большого количества файлов как через HTTP, так и через FTP. Часто я получаю более быструю загрузку HTTP с помощью ускорителя загрузки с несколькими подключениями, такого как axel или lftp с pget. В некоторых случаях я видел в 2-3 раза более быструю передачу файлов, используя что-то вроде:

axel http://example.com/somefile

or

lftp -e 'pget -n 5 http://example.com/somefile;quit'

против простого использования wget:

wget http://example.com/somefile

Но в других случаях wget значительно быстрее, чем lftp. Как ни странно, это даже верно, даже когда я делаю lftp с get, например:

lftp -e 'pget -n 1 http://example.com/somefile;quit'

Я понимаю, что загрузка файла через несколько подключений не всегда приводит к ускорению, в зависимости от того, насколько ограничена пропускная способность. Но: почему это должно быть медленнее? Особенно при вызове lftp/pget с параметром -n 1?


person jondahl    schedule 03.05.2010    source источник
comment
Вероятно, это должно быть на superuser.com.   -  person Ben S    schedule 04.05.2010
comment
Ваше программное обеспечение не должно работать с командной строкой. Используйте curl, у него есть обертки для большинства основных языков.   -  person Byron Whitlock    schedule 04.05.2010
comment
@Byron Whitlock - Из любопытства, почему бы и нет? Я часто считаю, что лучше использовать дочерние процессы вместо того, чтобы добавлять в свое приложение кучу библиотечного кода. У него есть как преимущества, так и недостатки, имхо.   -  person Mic    schedule 04.05.2010
comment
@jondahl ИМХО, вы не получите такого высокого уровня контроля. Когда что-то не получается, вам нужно разобрать строку. Вы должны беспокоиться об установке внешнего приложения с помощью установщика. С библиотекой вы можете эффективно выполнять многопоточность самостоятельно, что иногда лучше. Использование внешнего приложения более удобно для разработки, но это может быть головной болью в дикой природе.   -  person Byron Whitlock    schedule 04.05.2010
comment
Спасибо всем. @Byron Whitlock, для этого я использовал libcurl, завернутый в Ruby, но у меня периодически возникали тайм-ауты при записи в файлы при загрузке 3 ГБ. Эти инструменты довольно хорошо оптимизированы и надежны на уровне командной строки. Это, плюс возможность ускоренной загрузки, привело меня к lftp.   -  person jondahl    schedule 05.05.2010
comment
Насколько я понимаю, lftp поддерживает http, так что разве все эти передачи не используют протокол http?   -  person apraetor    schedule 11.10.2016


Ответы (1)


Возможно ли, что HTTP-сервер сжимает поток с помощью gzip? Я не могу вспомнить, обрабатывает ли wget gzip кодирование содержимого или нет. Если это так, то это может объяснить повышение производительности. Другая возможность заключается в том, что где-то в конвейере есть кэш HTTP. Вы можете попробовать что-то вроде

wget --no-cache --header="Accept-Encoding: identity"

и сравните это со временем передачи по FTP.

person D.Shawley    schedule 03.05.2010
comment
Не говоря уже о таких вещах, как сети распространения контента, QOS-маршрутизация (особенно в отношении непассивного ftp), кэширование прокси… - person symcbean; 05.05.2010