KA> это все навело меня к мысли написать следующее письмо, ибо мысль
KA> реализовать ниже описанное елозит по моему мозгу довольно давно....
KA> Вводная: у диалапщиков (и не только) иногда случается следующая
KA> проблема: качаем здоровый файл (архив или документ), в итоге получаем
KA> локальную копию файла, но оказывается, что она битая - т.е. где-то в
KA> каком-то месте что-то не срослось, передалось не так и т.д. и т.п.
KA> Получается, что нужно качать файл снова, а если он большой, то это долго
KA> и в итоге упирается в проблему траты лишних денег (тем более если
KA> говорить про скачанные мегабайты)
KA> Предложение: хотелось бы иметь такой сервис (наверное, требуется должны
KA> быть серверная и клиентская части): некоторой тулзе я скармливаю битый
KA> файл и размер "кластера", тулза логически разбивает файл на "кластера" и
KA> вычисляет CRC (MD5 и пр.) для каждого файла, потом мы посылаем
KA> результаты вычислений на сервер, а также файл (URL) и размер "кластера".
KA> Серверная часть также разбивает файл на "кластера", вычисляет CRC,
KA> сравнивает полученные CRC cо своими. И высылает ответ клиенту. В итоге,
KA> клиентская тулза выводит пользователю, что ему нужно скачать
KA> определенный "кластер" (или несколько) из сети снова (начальное и
KA> конечное смещение) или даже сама предлагает скачать их и скачивает.
KA> Итог: Данный сервис можно реализовать как довески к http и ftp, p2p. В
KA> зависимости от файла (по размеру, для каждого разный) и пропускной
KA> ширины канала должна быть свой размер "кластера".
Мысль в воздухе витает. И мою голову она навещала. В качестве довеска
было бы достаточно команды получения от сервера MD5 суммы для
выбранного диапазона файла. Если указан набор диапазонов, то по MD5
сумме для каждого диапазона. Тогда получится что-то вроде:
MD5 /pdf/example.pdf HTTP/1.0
Connection: Keep-Alive
Range: bytes= 1024-2047,4096-5000,6000-7000,8000-
Тогда можно сделать даже "очень умного" клиента, который, поняв в каком
блоке проблема, может попробовать уточнить кусок в приделах сбойного
блока, и тем еще больше ускорить скачивание.
Другое дело, что такие подсчеты на стороне сервера могут его серьезно
прогрузить. Так что решение не банально.