![]() |
Gleiche Datei parallel herunterladen
Moin,
sry für den komischen Titel, was anderes ist mir nicht eingefallen. Es geht um folgendes: Downloadmanager wie GetRight oder LeechGet können eine Datei mehrmals zu gleichen Zeit herunterladen, d.h. die Datei wird in 3 Teile zerlegt und dann alles auf einmal heruntergeladen. Somit wird der Downloadspeed erheblich erhöht, dass merkt man vor allem bei ISDN. Ich hoffe ihr wisst was genau ich meine ? Jetzt frage ich mich natürlich wie man sowas auch mit Delphi hinbekommen könnte. Indy - Sockets ? Hat da jemand ne Idee ? Thx |
Re: Gleiche Datei parallel herunterladen
Mittels des Content-Range Headers kannst du angeben welches Stück der Datei du haben willst.
|
Re: Gleiche Datei parallel herunterladen
Ah, danke, so geht es:
Delphi-Quellcode:
Jetzt hab ich nur das Problem das ich gerne jedes Mal manuell einstellen möchte wieviele Teil-Downloads es geben soll. Jetzt wäre es sicher nicht sehr elegant 8 IdHttp-Komponenten auf die Form zu klatschen, hat da jemand ne bessere Idee ?
IdHttp1.Request.ContentRangeStart:=1000; //bei Byte 1000 Download anfangen
IdHttp1.Request.ContentRangeEnd:=2000; //bei Byte 2000 Download beenden //Nachtrag: Ginge doch vielleicht mittels Threads, oder ? Ich guck derweil mal Luckie's Tutorial an... |
Re: Gleiche Datei parallel herunterladen
ich würde das ganze auch nicht auf die Form "klatschen" sondern zur Laufzeit erzeugen. Da die downloads gleichzeitig stattfinden sollen wird der Download ja wohl in Threads stattfinden, und genau da solltest du auch das TIdHttp erzeugen damit alles notwendige auch wirklich in dem Threadcontext erzeugt wird und nicht im Context des Haupttrheads.
|
Re: Gleiche Datei parallel herunterladen
Jupp, es sollte mit Threads funktionieren und am Besten, wie Mr.Thornberry schon sagte, die Kompunenten erst im Thread erzeugen.
Na ja, als erstes sollte man sich wohl nur mal den Dateiheader runterladen, damit man die Gesamstgröße der Datei erhält.
Delphi-Quellcode:
i := Dateigröße div 8;
IdHttp1.Request.ContentRangeStart := 0; IdHttp1.Request.ContentRangeEnd := i - 1; IdHttp2.Request.ContentRangeStart := i; IdHttp2.Request.ContentRangeEnd := i * 2 - 1; IdHttp3.Request.ContentRangeStart := i * 2; IdHttp3.Request.ContentRangeEnd := i * 3 - 1; IdHttp4.Request.ContentRangeStart := i * 3; IdHttp4.Request.ContentRangeEnd := i * 4 - 1; IdHttp5.Request.ContentRangeStart := i * 4; IdHttp5.Request.ContentRangeEnd := i * 5 - 1; IdHttp6.Request.ContentRangeStart := i * 5; IdHttp6.Request.ContentRangeEnd := i * 6 - 1; IdHttp7.Request.ContentRangeStart := i * 6; IdHttp7.Request.ContentRangeEnd := i * 7 - 1; IdHttp8.Request.ContentRangeStart := i * 7; IdHttp8.Request.ContentRangeEnd := Dateigröße; |
Re: Gleiche Datei parallel herunterladen
Joa danke,
ich werd die Geschichte mal versuchen. :-) |
Re: Gleiche Datei parallel herunterladen
Ich hab mal noch ne Frage, für die sich kein eigener Thread lohnt: Kann man so auch Downloads pausieren und fortsetzen? Ich lad einfach immer so 200 KB runter, dann schreib ich die neue Stelle (Bytes) in eine Datei. Wenn ich dann das Programm beende und wieder starte, frag ich die Stelle ab und lade einfach ab dieser Stelle weiter... Oder geht das auch einfacher?
mfg mr47 |
Re: Gleiche Datei parallel herunterladen
Kommt auf den Server an, ob der Resume unterstützt.
|
Re: Gleiche Datei parallel herunterladen
Zitat:
mr47 :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz