Pregunta

Tengo que implementar un sistema de middleware para compartir archivos, y tiene que dividir los archivos para que no se parezca a lo que sucede en bittorrent, donde envía y recibe piezas separadas simultáneamente de varias fuentes. ¿Cómo puedo hacer eso? ¿Es una biblioteca o tengo que implementar la división de archivos yo mismo?

¿Fue útil?

Solución

Dividir los archivos en bloques, digamos de 100KB cada uno. Luego calcule un hash SHA (o algún otro algoritmo de hash) en cada uno de los bloques. por lo tanto, si el archivo es de 905 KB, tendrá 10 tales hash calculados.

El servidor contendría un archivo de definición de hash para cada archivo que sirve. Este archivo de definición de hash contendría una lista de todos los bloques del archivo, junto con el hash. Entonces, si el servidor está sirviendo nuestro archivo de 905 KB llamado test.exe. Luego tendríamos otro archivo llamado test.exe.hashes que contiene una lista de los 10 hashes del archivo.

El cliente descargaría el archivo de definición de hash y se aseguraría de que tuviera todos los bloques. El cliente puede solicitar cada bloque individualmente y, una vez descargado, puede calcular el hash en su extremo nuevamente para asegurarse de que no haya daños.

No es necesario dividir físicamente el archivo, dividir un archivo es solo leer la parte que le interesa. El primer bloque del archivo es de un rango de bytes de 0 a 102399, el siguiente bloque es de 102400 a 204800, y así sucesivamente. Así que simplemente abra el archivo, busque esa posición, lea los datos y cierre el archivo.

Otros consejos

Observe la implementación de Split & amp; Concat (software GNU).

Es posible que desee considerar el uso de la codificación Solomon-Reed. Hará que conseguir los bloques finales sea mucho más fácil. Esta es la ruta que tomó Microsoft en Avalaunch.

Fuera de interés: ¿por qué no implementar BitTorrent o algo así? Hay muchos Clientes de OpenSource (es decir, Azureus ) y el protocolo es realmente simple . También hay un artículo con un poco más de detalle , pero esto contiene algunas extensiones, en duda, el funcionario La especificación siempre es correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top