LINUX.ORG.RU

Закачка всех кусочков одного файла по порядку, в несколько потоков.

 , загру


0

1

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

Поэтому надо:

Условно поделить файл например на 20 мб, то есть файл 100 мб это 5 кусочков. Затем сначала программа качает в несколько потоков первые 20 мб, потом вторые и так далее пока не закачается весь файл.

Вообще интересуют любые способы, от утилит командной строки и до (только не онлайн сервисы).


Ответ на: комментарий от minakov

А как же тогда докачка? Там насколько я понимаю программа отсылает место с которого нужно начать закачку.

И конечно меня интересуют не догадки. =)

krosss
() автор топика
Ответ на: комментарий от anonymous

Обычно FlashGot - дополнение для firefox находит прямую ссылку, я ставлю на закачку в 1 поток (любой менеджер загрузок), открываю закачивающийся файл нормальным (не флэш) плеером и смотрю.

Но так можно сделать только когда нагрузка спадает, а обычно скорость в 3 раза меньше положенной.

krosss
() автор топика
Ответ на: комментарий от anonymous

Я не силен в командной строке и скриптах. Можно пример?

krosss
() автор топика
Ответ на: комментарий от krosss

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

wakuwaku ★★★★
()
Ответ на: комментарий от wakuwaku

Что значит «чанками»? Вот сколько не лажу по интернету на большинстве сайтов для онлайн можно качать в несколько потоков и есть докачка. Или имелись ввиду куски файлов?

krosss
() автор топика
Ответ на: комментарий от silw

Скачивание использующее 2 соединения с хостом. Я правильно перевожу? Разве это не обычная загрузка в несколько потоков?

krosss
() автор топика

если фильм не редкий, то проще qbittorent - он умеет последовательное скачивание

anonymous
()

программа качает в несколько потоков первые 20 мб

Нельзя загрузить один кусок в N потоков не поделив кусок на N частей. Потоки не знают друг о друге ничего.

Представь что у тебя есть N человек в подчинении. Перед тобой стоит задача переписать книгу из M страниц. Каждый человек может за один раз до тебя донести копию одной или нескольких страниц. Саму книгу брать нельзя. Обращение к книге возможно только путем копирования одного листа. Пометок на книге делать нельзя. Копирование страницы занимает определенное время (T), все это время подчиненный ожидает копии страницы. Твои подчиненные не знают друг друга в лицо, эту же книгу уже копируют тысячи подчиненных других людей.

Что каждому из твоих подчиненных нужно сказать, если тебе требуется первые K страниц книги? (K<=M)

anonymous
()
Ответ на: комментарий от anonymous

Да твой совет самое оно, тсу нужно использовать торрент. А простая загрузка в несколько потоков обычно все загрузчики делят файл на кол-во потоков, т.е. Если 2 потока, второй будет с позиции 50%

anonymous
()
Ответ на: комментарий от anonymous

А если запустить несколько процессов curl каждый из которых качает свой кусок в несколько потоков, а потом все объединить?

krosss
() автор топика
Ответ на: комментарий от krosss

несколько процессов curl каждый из которых качает свой кусок в несколько потоков

Посмотри пример того, как можно загружать curl-ом в несколько потоков: http://www.opennet.ru/tips/info/1453.shtml. Каждый поток при этом загружает только свой кусок.

anonymous
()
Ответ на: комментарий от krosss

Прочитай, наконец, «man aria2c»

--stream-piece-selector=SELECTOR
Указать алгоритм выбора блока, который используется в HTTP/FTP-загрузке. Блок - означает сегмент фиксированной длины, который загружается параллельно, в разделенной на части, загрузке. Если задано default, то aria2 выберет блок так, чтобы это уменьшило количество установленных подключений. Это разумное поведение по умолчанию, поскольку установка подключения очень затратная операция. Если задано inorder, то aria2 выберет блок, который имеет минимальный индекс. Index=0 означает первый из файла. Это будет полезно при просмотре фильма, в то время как он загружается. Параметр --enable-http-pipelining может быть полезен для снижения накладных расходов при повторном подключении. Обратите внимание, что aria2 принимает на обработку параметр --min-split-size, так что необходимо будет указать разумное значение параметра --min-split-size. Если задано geom, то aria2 вначале выберет блок с минимальным индексом, как при inorder, однако она сохранит экспоненциально большую область от ранее выбранного блока. Это уменьшит количество установленных подключений и в то же время это позволит в первую очередь загрузить начало файла. Это будет полезно при просмотре фильма, в то время как он загружается. По умолчанию: default

justAmoment ★★★★★
()
Ответ на: комментарий от justAmoment

Я правильно понимаю? Речь о том, что потоки будут начинаться более часто к началу и реже к концу?

krosss
() автор топика
Ответ на: комментарий от justAmoment

Значит расположением потоков все-таки можно управлять со стороны клиента?

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

krosss
() автор топика
Ответ на: комментарий от krosss

aria2c - это и есть клиент для качания, ты ему приказы даешь «что и как» качать. Если он сможет, то он скачает так, как ты ему сказал. Если сервер ему не позволит, то всё будет закачано в 1 поток. Плюс aria2c умеет качать с нескольких источников одновременно, в том числе и по торрент ссылкам.

justAmoment ★★★★★
()
Ответ на: комментарий от justAmoment

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

Это возможно в aria2c?

krosss
() автор топика

Вообще интересуют любые способы, от утилит командной строки и до (только не онлайн сервисы).

дык это:

man curl

       -C, --continue-at <offset>
              Continue/Resume  a  previous file transfer at the given offset. The given offset is the exact number of bytes that
              will be skipped, counting from the beginning of the source file before it is transferred to the  destination.   If
              used with uploads, the FTP server command SIZE will not be used by curl.

              Use  "-C  -"  to tell curl to automatically find out where/how to resume the transfer. It then uses the given out-
              put/input files to figure that out.

              If this option is used several times, the last one will be used.
drBatty ★★
()
Ответ на: комментарий от minakov

но по-моему это - задача сервера, решать, как отдавать

не. Сервер может поддерживать, а может НЕ поддерживать докачку. Если не умеет, то no way.

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.