Question

Je dois mettre en place un système middleware pour le partage de fichiers, qui doit ensuite fractionner les fichiers, comme ce qui se passe sur BitTorrent, où il envoie et reçoit simultanément des éléments séparés de différentes sources. Comment je fais ça? Est-ce une bibliothèque ou dois-je implémenter le fractionnement de fichier moi-même?

Était-ce utile?

La solution

Divisez les fichiers en blocs, disons de 100 Ko chacun. Calculez ensuite un hachage SHA (ou un autre algorithme de hachage) sur chacun des blocs. ainsi, si le fichier contient 905 Ko, vous obtiendrez 10 hachages de ce type.

Le serveur contiendrait un fichier de définition de hachage pour chaque fichier qu’il servirait. Ce fichier de définition de hachage contiendrait une liste de tous les blocs du fichier, ainsi que le hachage. Donc, si le serveur sert notre fichier de 905 Ko appelé test.exe. Ensuite, nous aurions un autre fichier appelé test.exe.hashes contenant une liste des 10 hachages du fichier.

Le client téléchargerait le fichier de définition de hachage et s’assurerait qu’il contenait tous les blocs. Le client peut demander chaque bloc individuellement et après le téléchargement, il peut à nouveau calculer le hachage pour s'assurer qu'il n'y a pas de corruption.

Vous n'avez pas besoin de scinder physiquement le fichier, car scinder un fichier en lit simplement la partie qui vous intéresse. Le premier bloc du fichier va de la plage d'octets allant de 0 à 102399, le bloc suivant allant de 102400. à 204800, et ainsi de suite. Il suffit donc d'ouvrir le fichier, de rechercher cette position, de lire les données et de fermer le fichier.

Autres conseils

Regardez l'implémentation de Split & amp; Concat (logiciel GNU).

Vous pouvez envisager d’utiliser le codage Solomon-Reed. Cela facilitera beaucoup l'obtention des derniers blocs. C’est la voie empruntée par Microsoft dans Avalaunch.

Par intérêt: pourquoi ne pas simplement implémenter BitTorrent ou quelque chose du genre? Il existe de nombreux clients OpenSource ( Azureus ) et le protocole est très simple . Il existe également un article avec un peu plus de détails , mais il contient quelques extensions - en cas de doute, le document officiel spec a toujours raison.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top