Вопрос

Мне нужно реализовать промежуточную систему для совместного использования файлов, и она должна разделять файлы, как это происходит в BitTorrent, где она одновременно отправляет и получает отдельные фрагменты из разных источников.Как мне это сделать?Это библиотека или мне придется самому реализовать разделение файлов?

Это было полезно?

Решение

Разделите файлы на блоки, скажем, по 100 КБ каждый.Затем вычислите хэш SHA (или какой-либо другой алгоритм хеширования) для каждого из блоков.поэтому, если размер файла составляет 905 КБ, у вас будет рассчитано 10 таких хешей.

Сервер будет содержать файл определения хеша для каждого файла, который он обслуживает.Этот файл определения хеша будет содержать список всех блоков файла вместе с хешем.Итак, если сервер обслуживает наш файл размером 905 КБ с именем test.exe.Тогда у нас будет еще один файл под названием test.exe.hashes, который содержит список из 10 хешей файла.

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

Вам не нужно физически разбивать файл, разбиение файла — это просто чтение той его части, которая вас интересует.Первый блок файла имеет диапазон байтов от 0 до 102399, следующий блок — от 102400 до 204800 и так далее.Итак, просто откройте файл, найдите эту позицию, прочитайте данные и закройте файл.

Другие советы

Посмотрите на реализацию Split & Concat (программное обеспечение GNU).

Возможно, вы захотите использовать кодировку Соломона-Рида.Это значительно облегчит получение последних блоков.Именно по этому пути пошла Microsoft в Avalaunch.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top