Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Wie Download mit/in mehreren Chunks? (https://www.delphipraxis.net/154382-wie-download-mit-mehreren-chunks.html)

Blatt 8. Sep 2010 23:01

Wie Download mit/in mehreren Chunks?
 
Schöne gute Nacht,
ich würde gerne einen kleinen Downloader schreiben, der mir von einer Website bestimmte Dateien herunterlädt. Da es aber sehr viele werden können, dachte ich, es wäre effizient, mit/in mehreren Chunks herunterzuladen, sodass ein wenig mehr 'Power' dahinter ist.
Nun weiß ich gar nicht, wie das eigentlich heißt.. Download
* in mehreren Chunks
* mit mehreren Threads
* mit mehreren Verbindungen

Könnte mir vielleicht jemand aufzeigen, was dahinter steckt, und Tipps geben, wie so etwas zu implementieren sei (vllt. hat jmnd. Beispiele)?

Vielen Dank! :-D

SirThornberry 9. Sep 2010 08:28

AW: Wie Download mit/in mehreren Chunks?
 
Chunks sind es definitiv nicht. Wenn du mehrere Downloads gleichzeitig möchtest musst du mehrere Verbindungen aufbauchen. Und damit du auch wirklich gleichzeitig mehrere machen kannst benötigst du auch mehrere Threads (ein Thread kann nur einwas zu gleichen Zeit machen).
Ob das ganze wirklich was bringt hängt von deiner Internetverbindung und den Beschränkungen des Providers ab (Provider = Anbieter der Downloads).

Beispiel1:
- Bandbreite Provider: 1 MBit/s
- keine Bandbreitenbeschränkung pro Verbindung
- Bandbreite deiner Verbindung zum Provider: 500 kb/s
-> kein Geschwindigkeitsgewinn

Beispiel1:
- Bandbreite Provider: 1 MBit/s
- Bandbreitenbeschränkung pro Verbindung 500 kb/s
- Bandbreite deiner Verbindung zum Provider: 1 MBit/s
-> da eine einzelne Verbindung nicht die maximale Bandbreite nutzt bleibt Bandbreite übrig für eine weitere Verbindung -> Geschwindigkeitsgewinn

Aber bei fast allen Providern (außer es sind Downloadseiten) gibt es in der Regel keine Bandbreitenbeschränkung die unter dem liegt was der Benutzer bei sich zu Hause an Bandbreite anliegen hat.

Blatt 9. Sep 2010 08:49

AW: Wie Download mit/in mehreren Chunks?
 
Achso, sorry, ich meinte mit mehreren Verbindungen eine einzige Datei herunterladen
Also so wie Flashget, etc. nur weiß ich nicht, wie die das machen..

SirThornberry 9. Sep 2010 08:54

AW: Wie Download mit/in mehreren Chunks?
 
Auch dort gilt das gleiche. Um mehreres gleichzeitig herunter zu laden brauchst du mehrere Threads. Aber auch da bringt das ganze nur etwas wenn deine Verbindung zu Hause schneller ist als eine einzelne Verbindung um die Datei herunter zu laden.
Das Funktionsprinzip ist folgendes. Man fragt erst ab wie groß die Gesamtdatei ist. Dann legt man eine Datei mit dieser Größe an. Anschließend startet man mehrere Verbindungen welche diese Datei füllen. Dabei gibt es dann verschiedene Vorgehensweisen.
Man kann die Dateigröße durch die Anzahl der Verbindungen teilen und lässt dann jede Verbindung den entsprechenden Teil herunterladen (bei TIdHttp und TIdFTP kann man angeben von wo bis wo heruntergeladen werden soll). Die andere Variante ist das man sich vorher festlegt wie groß so ein Teil ist der heruntergeladen werden soll. Zum Beispiel könnte man mit der ersten Verbindung von Stelle 0 bis 1 MB herunterladen und mit der zweiten Verbindung die Stelle 1 MB bis 2 MB. Und sobald eine Verbindung fertig ist lädt man mit dem Thread den nächsten Teil der notwendig ist herunter.

Blatt 9. Sep 2010 09:11

AW: Wie Download mit/in mehreren Chunks?
 
Ah, ok.
Also TIdHttp mit Ranges, danke!

Es gibt ja auch Downloads, in deren HTTP Headers Content-Length nicht definiert ist.
Wenn die Datei 1 MB groß ist und ich 2 Threads habe, die einfach mal jeweils 2 MB laden sollen, da man die Größe ja nicht kennt, funktioniert das dann synchron, wenn der eine anfängt 2 MB zu laden und der andere auch?

Und was genau ist eine Hang-up Protection?
Falls das zum Thema passt..

SirThornberry 9. Sep 2010 10:04

AW: Wie Download mit/in mehreren Chunks?
 
Ohne es zu wissen würde ich behaupten Hang-Up Protection ist die Möglichkeit einen abgebrochenen Download fortzusetzen. Wenn dies nicht gegeben ist kann man auch nicht mehrere Teile herunterladen.
Und bei Dateien wo die Größe vorher nicht fest steht kann es sein (je nach Server der dahinter steckt) das es auch nicht möglich ist nur einen bestimmten Teil der Datei herunterzuladen. Denn man sollte wissen das für jede Verbindung die Datei geöffnet wird. Und wenn da eine PHP-Datei dahinter steckt die einem den Download zur Verfügung stellt so wird diese jedesmal aufgerufen aber eben nur ab einer bestimmten Position das zurück geliefert übertragen (je nachdem welchen Range man angibt)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz