+  HandyCache форум
|-+  Главная категория» Новые предложения» Докачка файлов и загрузка по частям
Имя пользователя:
Пароль:
Страниц: [1] 2 3 ... 7   Вниз
  Отправить эту тему    Печать  
Автор Тема: Докачка файлов и загрузка по частям  (Прочитано 111836 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« : 15 Январь 2007, 23:44:08 »

Эта тема уже ни раз всплывала на ру-борде, но потом благополучно забывалась...

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

Тогда во многих случаях и менеджер закачек не понадобится!
А пользователи на плохих каналах получат дополнительную экономию трафика!

Естественно, динамический контент докачать не получится. А вот картинки, архивы, музыку и т.п. известной длины - вполне!

Вроде и mai62 был не против этой идеи... Улыбка
Давайте подумаем и обсудим, нужна ли такая опция и как ее лучше реализовать!
« Последнее редактирование: 27 Февраль 2011, 15:35:12 от DenZzz » Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #1 : 16 Январь 2007, 09:03:52 »

Конечно нужна.
Обсуждали не раз и алгоритм один уже предлагался.
Суть в том, чтобы сохранять запросы Partial Content тоже, и склеивать на лету.
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #2 : 16 Январь 2007, 09:15:34 »

К именам фрагментов лучше добавлять просто информацию о месте его в полном файле.
Например, дописывать такую строчку #305806
Так мы узнаем, что фрагмент начинается с позиции 305806 байт от начала.
Длину фрагмента узнаем по размеру файла с этим фрагментом.
Фрагмент начинающийся с нулевой позиции называем так-же как и сейчас: file.new или лучше file#0

Если это будет реализовано, я съэкономлю кучу трафика на Windows Update.

Цитировать
Сколько же там кусочков будет, тысячи?

Да. Но, как правило, кусочки идут по порядку. Тогда можно их на лету склеивать. Т.е. дописывать в концы файлов а не создавать новые.
« Последнее редактирование: 16 Январь 2007, 09:19:31 от Сергей » Сообщить модератору   Записан
Rick
Администратор
*****

Репутация: +15/-1
Offline Offline

Сообщений: 868


WWW
« Ответ #3 : 16 Январь 2007, 09:51:16 »

Цитировать
Суть такова: если сервер или провайдер (плохая связь и т.п.) внезапно разорвали соединение во время закачки файла, то при следующей попытке не начинать качать файл с начала (как сейчас!), а попытаться его докачать с того места, где закачка была прервана!
1. Этим же занимается программа (браузер) запросившая файл.
2. А что делать с недокачанными обрывками остановленых и так и не возобновленных загрузок? Будут лежать мертвым грузом в кэше до очистки?
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #4 : 16 Январь 2007, 10:02:42 »

Цитировать
1. Этим же занимается программа (браузер) запросившая файл

Чем? Кэшированием? С какого перепугу?

Цитировать
2. А что делать с недокачанными обрывками остановленых и так и не возобновленных загрузок? Будут лежать мертвым грузом в кэше до очистки?

А что сейчас происходит с недокачанными кусками .new ?
Тоже нерешенный вопрос. Сейчас они не удаляются но и не докачиваются потом.
Сообщить модератору   Записан
Rick
Администратор
*****

Репутация: +15/-1
Offline Offline

Сообщений: 868


WWW
« Ответ #5 : 16 Январь 2007, 10:17:10 »

Чем? Кэшированием? С какого перепугу?
Хоть убей, не вижу в цитате на которую я отвечал слова "кэш" и производных от него.

Цитировать
А что сейчас происходит с недокачанными кусками .new ?
Тоже нерешенный вопрос. Сейчас они не удаляются но и не докачиваются потом.
Т.е. проблема только усугубится увеличением таких обрывков? А есть предложения по решению?
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #6 : 16 Январь 2007, 10:26:08 »

Хоть убей, не вижу в цитате на которую я отвечал слова "кэш" и производных от него.

Докачка с места разрыва подразумевает сохранение в кэше (кэширование) скачанных данных.


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

Проблема как раз разрешится. Сейчас фрагменты лежат мертвым грузом. А тут они пойдут в дело. И будет их не много а по одному фрагменту на каждый файл.
Сообщить модератору   Записан
Rick
Администратор
*****

Репутация: +15/-1
Offline Offline

Сообщений: 868


WWW
« Ответ #7 : 16 Январь 2007, 10:41:30 »

Докачка с места разрыва подразумевает сохранение в кэше (кэширование) скачанных данных.
Когда я в Opera скачиваю какой-то файл я могу остановить загрузку, затем продолжить ее. Так же и в FF. Т.е. файлы загружаемые через "Сохранить" или "Сохранить как..." разумеется кэшируются браузером и при возобновлении закачки браузер посылает запрос с какого места следует продолжить загрузку.
Недокачанные файлы со страниц (картинки например) так же попадают в кэш браузера и в случае разрыва связи мы и видим "полкартинки". Пытаются ли браузеры докачивать такие файлы - не уверен, вроде бы нет.
Так а здесь и сейчас о каких файлах идет речь? Какие файлы предлагается пытаться докачивать (тип, размер), а какие нет?


Проблема как раз разрешится. Сейчас фрагменты лежат мертвым грузом. А тут они пойдут в дело. И будет их не много а по одному фрагменту на каждый файл.
Возможность работы многопоточной "качалки" через НС не учитывается?
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #8 : 16 Январь 2007, 10:59:05 »

Цитировать
при возобновлении закачки браузер посылает запрос с какого места следует продолжить загрузку.

Т.е имеем Partial Content клиент посылает запросы на скачку не всего файла а только фрагментов. Мы эти фрагменты корректно сохраним в кэше и склеим если нужно.

Цитировать
Пытаются ли браузеры докачивать такие файлы
Не пытаются. Качают заново. В таком случае, HC бы просто сразу отдал браузеру уже скачанное начало файла а серверу послал запрос на остаток. Браузер будет думать, что качает с начала.

Цитировать
Какие файлы предлагается пытаться докачивать
Файлы с известным размером.
Кстати, желательно еще сохранять в кэше размер файла лежащего на сервере. 

Цитировать
Возможность работы многопоточной "качалки" через НС не учитывается?
Об этом и речь.
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +213/-4
Offline Offline

Сообщений: 6152


« Ответ #9 : 16 Январь 2007, 11:04:42 »

Несколько дней назад вспоминал эту тему, к тому подтолкнуло резкое ухудшение качества моего выхода в интернет, часто обрывается закачка файлов в несколько десятков килобайт. Хотелось автоматом начинать докачку сразу при обрыве, без участия пользователя. Пока не нашел с какой стороны подступисться (связь с сервером ведь уже потеряна, нужно возобновлять соединение, а поток, работающий с этим файлом, находится уже на стадии завершения своей работы).
Сделать докачку при обновлении вроде не сложно, единственное, что мешает - мусор в кэше.
Цитировать
А что сейчас происходит с недокачанными кусками .new ?
Тоже нерешенный вопрос. Сейчас они не удаляются но и не докачиваются потом.
Оставлять их не планировалось, уни должны и будут удаляться.
Цитировать
Так а здесь и сейчас о каких файлах идет речь? Какие файлы предлагается пытаться докачивать (тип, размер), а какие нет?
Думаю, обо всех недокачанных: картинках, html, скрипnах и т.д. Они, как ни печально, тоже не всегда загружаются полностью, не только многомегабайтные архивы.
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #10 : 16 Январь 2007, 11:13:00 »

Цитировать
Оставлять их не планировалось, уни должны и будут удаляться.
Почему сейчас не удаляются? Когда они должны удаляться по твоему?
Я за то, чтобы их оставлять, и удалять только по команде очистки кэша.

html данные можно докачивать только в том случае, если страница на сервере не изменилась. Т.е. сервер сообщает размер и дату. Размер не изменился а дата не новее файла в кэше.
Дату мы храним а атрибутах файла.
Где хранить размер?
« Последнее редактирование: 16 Январь 2007, 11:25:11 от Сергей » Сообщить модератору   Записан
Rick
Администратор
*****

Репутация: +15/-1
Offline Offline

Сообщений: 868


WWW
« Ответ #11 : 16 Январь 2007, 11:37:57 »

Т.е имеем Partial Content клиент посылает запросы на скачку не всего файла а только фрагментов. Мы эти фрагменты корректно сохраним в кэше и склеим если нужно.
Не нужно. Если браузер посылает запрос на фрагмент, то и склейку он выполнит сам. Если в ответ на запрошенный фрагмент отдать весь файл будет ошибка.

Цитировать
Не пытаются. Качают заново.

Верно. Браузер же "не знает", что файл недокачен - просто показывает то что есть в кэше. А по команде "Обновить" обновляет естественно целиком.

Цитировать
Файлы с известным размером.

Имхо это необходимое но недостаточное условие. Например, пытаться докачивать картинку в 1,5КБ нужно? Имхо нет - больше времени уйдет на выяснение возможности докачать, чем скачать с нуля.

Цитировать
Кстати, желательно еще сохранять в кэше размер файла лежащего на сервере.

Есть мысли в каком виде это делать?

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

Цитировать
Думаю, обо всех недокачанных: картинках, html, скрипnах и т.д. Они, как ни печально, тоже не всегда загружаются полностью, не только многомегабайтные архивы.
Думаю, не все докачки одинаково полезны. Улыбка Мелкие файлы имхо докачивать - только время терять. Вопрос в границе: что считать "мелкими". Может быть есть и другие критерии по которым файл не нужно пытаться докачивать.
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #12 : 16 Январь 2007, 11:55:17 »

Цитировать
Если браузер посылает запрос на фрагмент, то и склейку он выполнит сам.
Ты чего-то не понял, наверное. Браузер не трогает файлы в кэше HC. Откуда ему знать о нем?
И следовательно склеить не сможет.

Цитировать
Если в ответ на запрошенный фрагмент отдать весь файл будет ошибка.
А зачем отдавать весь файл при запросе фрагмента?
Что запросил браузер, то и должен получить.

Цитировать
Например, пытаться докачивать картинку в 1,5КБ нужно?
А часто обрывается закачка маленьких файлов? Вот большие картинки надо докачивать.
Можно задать в опциях порог, меньше которого не докачивать а тянуть заново.

Цитировать
Есть мысли в каком виде это делать?
file_name#start.size
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #13 : 16 Январь 2007, 11:59:18 »

Squid точно кэширует фрагменты. Много раз такое замечал. Канал у нас в институте был слабый. Когда запускал многопоточную закачку в ReGet, то иногда начало файла скачивалось мгновенно. Видимо, кто-то начинал качать через IE и обрывал. Но информация сохранялась в кэше.
Сообщить модератору   Записан
Rick
Администратор
*****

Репутация: +15/-1
Offline Offline

Сообщений: 868


WWW
« Ответ #14 : 16 Январь 2007, 12:10:07 »

Ты чего-то не понял, наверное. Браузер не трогает файлы в кэше HC. Откуда ему знать о нем?
И следовательно склеить не сможет.
Когда я читаю "клиент посылает запросы на скачку не всего файла а только фрагментов" я понимаю, что клиент - это браузер посылающий запрос НС, а "Мы эти фрагменты корректно сохраним в кэше и склеим если нужно" - здесь "мы" - это собственно НС. Если клиент, посылающий запрос на фрагмент и склевающий "мы" - это один и тот же НС - да, я действительно что-то понял неправильно.

Цитировать
А зачем отдавать весь файл при запросе фрагмента?
Что запросил браузер, то и должен получить.
Именно об этом я и говорил.
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #15 : 16 Январь 2007, 12:16:21 »

Мы эти фрагменты корректно сохраним в кэше и склеим если нужно

... и отдадим фрагменты попутно клиенту (браузеру, качалке), который склеит их у себя, разумеется. Улыбка
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +213/-4
Offline Offline

Сообщений: 6152


« Ответ #16 : 16 Январь 2007, 13:07:52 »

Rick
Цитировать
А почему нельзя не отдавать файл запросившей прогамме (браузеру) удерживая соединение с ним открытым и ждать восстановления коннекта с инетом (ограничив время ожидания), после чего отправлять запрос на дозакачку?
Если соединение разорвалось, то можно уже не ждать, оно само не восстановится. И я не писал, что нельзя отправлять запрос на дозакачку. Я писал
Цитировать
Пока не нашел с какой стороны подступисться (связь с сервером ведь уже потеряна, нужно возобновлять соединение, а поток, работающий с этим файлом, находится уже на стадии завершения своей работы).
Сообщить модератору   Записан
Rick
Администратор
*****

Репутация: +15/-1
Offline Offline

Сообщений: 868


WWW
« Ответ #17 : 16 Январь 2007, 13:25:40 »

Если соединение разорвалось, то можно уже не ждать, оно само не восстановится.
Давай разделим понятия соединения (НС-сервер, НС-браузер) и соединение с инетом ("коннект") - а то похоже путаемся. Или Я путаюсь.
Дык вот: при обрыве коннекта, соединение НС-сервер разумеется тоже разрывается. НС "машет ручкой" браузеру и соединение НС-браузер так же закрывается. Суть того, что я писал в посте выше: не закрывать соединение НС-браузер а ожидать восстановление коннекта (не до бесконечности конечно). Восстановится ли коннект ручной командой пользователя или автоматом ("перезвонить при обрыве") - не важно. При появлении коннекта установить новое соединение НС-сервер, запросить докачку файла и получив отдать его ожидающему браузеру.

Цитировать
И я не писал, что нельзя отправлять запрос на дозакачку. Я писал
Цитировать
Пока не нашел с какой стороны подступисться (связь с сервером ведь уже потеряна, нужно возобновлять соединение, а поток, работающий с этим файлом, находится уже на стадии завершения своей работы).
А почему/зачем "поток, работающий с этим файлом, находится уже на стадии завершения своей работы"?
Сообщить модератору   Записан
Кирилл
Beta tester
*****

Репутация: +5/-1
Offline Offline

Сообщений: 124


« Ответ #18 : 16 Январь 2007, 14:40:11 »

А может быть стоит вместо приделывания к HC собственного менеджера закачек, дать возможность для загрузки больших файлов использовать внешний? Дабы не пытаться забивать гвозди микроскопом.
Сообщить модератору   Записан
Rick
Администратор
*****

Репутация: +15/-1
Offline Offline

Сообщений: 868


WWW
« Ответ #19 : 16 Январь 2007, 14:53:41 »

дать возможность для загрузки больших файлов использовать внешний? Дабы не пытаться забивать гвозди микроскопом.
Ты не совсем верно понял проблему: в основном речь не о загрузке больших файлов, а обычных страниц и их элементов. Но будет работать и для больших файлов если кто-то будет их качать через HC (зачем?) - т.е механизм одинаковый.
Представь, что на странице тяжеловесные картинки - дисконнект - качай картинки с нуля. Речь идет о том, чтобы докачать их после восстановления связи.
Сообщить модератору   Записан
Страниц: [1] 2 3 ... 7   Вверх
  Отправить эту тему    Печать  

 
Перейти в: