Frage

Ich habe ein Middleware-System für die Dateifreigabe zu implementieren, und es hat die Dateien nicht unähnlich zu teilen, was auf Bittorrent geschieht, wo es sendet und empfängt getrennte Teile gleichzeitig von varios Quellen. Wie mache ich das? Ist es eine Bibliothek oder ich muss die Datei implementieren selbst spalten?

War es hilfreich?

Lösung

Teilen Sie die Dateien in Blöcke sich jeweils 100 KB sagen. einen SHA-Hash (oder einen anderen Hash-Algorithmus) auf jeden der Blöcke dann berechnen. so, wenn die Datei 905KB ist, würden Sie 10 solche Hashes berechnet haben.

Der Server für jede Datei eine Hash-Definitionsdatei enthält, die es dient. Diese Hash-Definitionsdatei würde eine Liste aller Blöcke der Datei enthält, zusammen mit dem Hash. Also, wenn der Server unsere 905KB Datei namens test.exe dient. Dann hätten wir eine andere Datei namens test.exe.hashes haben, die eine Auflistung der 10-Hashes der Datei enthält.

Der Client würde die Hash-Definitionsdatei herunterzuladen und sicherzustellen, dass sie alle Blöcke haben. Der Client kann jeden Block einzeln anfordern und nach dem Download ist, kann er den Hash an ihrem Ende wieder berechnen, um sicherzustellen, gibt es keine Korruption.

Sie müssen nicht physisch die Datei aufgeteilt, eine Datei aufteilen nur ist das ein Teil davon zu lesen, die Sie interessiert sind. Der erste Block der Datei ist von Byte-Bereich 0-102399, ist der nächste Block von 102400 bis 204800, und so weiter. So öffnen Sie einfach die Datei, suchen Sie zu dieser Position, lesen Sie die Daten, und schließen Sie die Datei.

Andere Tipps

Sehen Sie sich die Implementierung von Split & Concat (GNU-Software).

Sie möchten vielleicht Solomon-Reed-Codierung zu prüfen. Es macht die letzten Blöcke viel leichter. Dies ist die Route Microsoft in Avalaunch nahm.

Aus Interesse: Warum nicht einfach implementieren BitTorrent oder so etwas? Es gibt viele Open Source-Clients (zB Azureus ) und das Protokoll ist wirklich einfach . Es gibt auch einen Artikel mit einem wenig mehr Detail , aber das enthält einige Erweiterungen - im Zweifelsfall die offizielle spec ist immer richtig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top