1 (изменено: Евген, 2011-10-11 08:56:14)

Тема: HTA: Downloader

Коллеги, приветствую !
Давненько вынашиваю мысль создания собственного downloader'a, многопоточного, типа FlashGet.
Кто поможет в голове накидать прозрачный алгоритм работы ?
Если примерчик есть примерчик или поможете с организацией потока с помощью Request.Headers (для продолжения закачки с последнего места) - заранее респект !

Времени не хватает... :-(

2

Re: HTA: Downloader

Пробовал такой вариант. Но стандартные компоненты для этих целей не особо подойдут. XmlHttp и ServerXmlHttp не дают управлять потоком до полной загрузки. WinHttpRequest имеет событие OnDataArrival с ссылкой на блок данных, но эти события не подключаются в скриптах. На XP просто крэш WSH вызывает, в WSC вообще событие не происходит.

Оставшийся вариант качалки я делал через получение Partial Content. Т.е через XmlHttp запрашивал блок, его получал, записывал. Но такой вариант проходит только с серваками, поддерживающими обработку запроса 206. В ином случае - качать блочно не получится. Т.е скрипт будет висеть и ждать полной загрузки.

Надеюсь более менее понятно объяснил. ) Если что - готов подробнее.

Единственную альтернативу, которую вижу - это Winsock. Но это такой гемор будет. Что лучше вообще забыть о таких извратах. ))

Либо создать свой Activex (можно даже оболочкой на WinHttpRequest), то всё довольно просто. )

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3

Re: HTA: Downloader

Ну вот и голову ломать дальше не надо. Перспективы разработки понятны...

Времени не хватает... :-(

4

Re: HTA: Downloader

А вот такой заголовок Range , не поможет ?
вот примерчик
ИМХО это то - что нужно, или я ошибаюсь ?
Создать несколько потоков, каждый закачивает свой Range в байтах, складываем их в один файл, в соответствии с указанным Range.
Не ?

Времени не хватает... :-(

5

Re: HTA: Downloader

А можно вопрос не в тему. А зачем вам свой собственный Downloader?

Нас невозможно сбить с пути, нам пофигу куда идти.

6

Re: HTA: Downloader

Евген пишет:

А вот такой заголовок Range , не поможет ?

Как раз об этом я и написал

Но такой вариант проходит только с серваками, поддерживающими обработку запроса 206. В ином случае - качать блочно не получится. Т.е скрипт будет висеть и ждать полной загрузки.

Теперь объясню подробнее.

В идеальном случае общение качалки с сервером проходит по принципу (очень урезал для упрощения)

Этап 1: Просто скачка

Качалка: GET имя_файла
Сервер: 200 OK + поток содержимого

и пошло поехало - качалка тащит весь поток к себе. В случае с XmlHttp и ServerXmlHttp - мы не получим возврата к выполнению кода до тех пор, пока сам объект не загрузит всё тело. (Флаг асинхронности тут совершенно ничего не даст.)

В случае WinHttpRequest - в событии DataArriaval мы получим блоки, которые потихоньку возвращаются с сервака.

Но вот допустим оборвалась скачка. А мы пол файла уже выкачали. Обидно до невозможности. В этом случае УМНАЯ качалка начинает этап 2.
Этап 2: докачка

Качалка: запрашивает Range a-b

Т.е просит - дай мне блок с a(допустим с десятого) байта и длиной b (допустим 100 байт)
И теперь качалка ждёт ответа. Но дальше есть 2 варианта. Если сервер докачку держит, то он ответит статусом 206 Partial Content и блоком данных. А если нет, то он гад эдакий ответит так же как в этапе 1 (200 OK) и всем телом файла. И тогда бедной качалке придётся удалить, всё что она накачала и начать скачку заново. )

Именно поэтому Range нам и не поможет. )

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

7

Re: HTA: Downloader

Дык позор и стрём тем сервакам которые не поддерживают дозакачку !
Как-нить появится времечко - попробую чонть на эту тему начать... (интересно мне просто...)

Времени не хватает... :-(

8

Re: HTA: Downloader

Позооор. Однозначно позооор таким сервакам. )

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

Если будут вопросы - буду рад ответить как тут, так и по асе.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !