Domanda

Devo implementare un sistema middleware per la condivisione di file, e deve dividere i file non diversamente da ciò che accade su bittorrent, dove invia e riceve pezzi separati contemporaneamente da varie fonti. Come lo faccio? È una libreria o devo implementare il file suddividendo me stesso?

È stato utile?

Soluzione

Dividi i file in blocchi, diciamo di 100 KB ciascuno. Quindi calcola un hash SHA (o qualche altro algoritmo di hashing) su ciascuno dei blocchi. quindi se il file è 905 KB, si calcolerebbero 10 di questi hash.

Il server conterrebbe un file di definizione di hash per ogni file che serve. Questo file di definizione dell'hash conterrebbe un elenco di tutti i blocchi del file, insieme all'hash. Quindi, se il server sta servendo il nostro file da 905 KB chiamato test.exe. Quindi avremmo un altro file chiamato test.exe.hashes che contiene un elenco dei 10 hash del file.

Il client scarica il file di definizione dell'hash e si assicura che abbia tutti i blocchi. Il client può richiedere ogni blocco singolarmente e, una volta scaricato, può nuovamente calcolare l'hash alla fine per assicurarsi che non vi sia corruzione.

Non è necessario dividere fisicamente il file, la divisione di un file sta solo leggendo la parte di esso che ti interessa. Il primo blocco del file è compreso nell'intervallo di byte da 0 a 102399, il blocco successivo è da 102400 al 204800 e così via. Quindi basta aprire il file, cercare in quella posizione, leggere i dati e chiudere il file.

Altri suggerimenti

Guarda l'implementazione di Split & amp; Concat (software GNU).

Potresti prendere in considerazione l'uso della codifica Solomon-Reed. Renderà molto più facile ottenere i blocchi finali. Questa è la strada che Microsoft ha intrapreso in Avalaunch.

Per interesse: perché non implementare BitTorrent o qualcosa del genere? Esistono molti client OpenSource (ad esempio Azureus ) e il protocollo è veramente semplice . C'è anche un articolo con un po 'più di dettagli , ma questo contiene alcune estensioni - nel dubbio, il funzionario la specifica ha sempre ragione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top