Socket Limit DL Verbindungsgeschwindigkeit

haimat

Mitglied
Hallo zusammen,

ich schreibe gerade an einem Java-Download-Manager. Dieser soll die Funktion erhalten, die maximale DL-Übertragungsrate nach Wunsch auf ein eingestelltes Maximum zu limitieren. Die Netzwerk-Datenübertragung basiert in meinem Programm auf non-blocking NIO SocketChannels.

Die einfachste Möglichkeit wäre es natürlich, jede Sekunde die empfangenen Bytes zu zählen und dann bei Erreichen des Limits bis zum Ende dieser Sekunde zu warten (also keine Daten mehr zu übertragen). Dieser Ansatz gefällt mir aber nicht, da so ja der Download bis zum Erreichen des Limits auf voller Geschwindigkeit läuft, um danach komplett zu stoppen, dann wieder voller Download, kompletter Stop, voller Download, etc. pp.

Ich suche stattdessen nach einer Lösung, die mir die DL-Geschwindigkeit konstakt auf dem eingestellen Maximum/Limit hält.

Für diese Anforderung gibt es bestimmt einen Lösungansatz, oder? Ich habe schon gegoogelt und bin auf einige Vorschläge zum Thema gestossen. Allerdings schlagen die meisten davon die oben beschriebene, unschöne Lösung vor; die anderen Vorschläge sind ziemlich kompliziert. Ich würde mich über eine schlanke Lösung freuen...

Hat jemand eine Idee? Bin für jeden Vorschlag offen :)
Danke schon mal im Voraus!

Viele Grüße, Matthias
 
G

Gast2

Gast
Kannst ja mal in den Sourcen von Azureus / Vuze gucken wie die das implementiert haben. Da gibt es die Möglichkeit ja auch.
 

Empire Phoenix

Top Contributor
hm du könntest errechen wiviele byte maximal pro sekunde übermittelt werden dürfen,
dann daraus in millisekunden die zeit errechen, wann diese gedownloaded werden, und dann per eigener timer classe genau die gewünschte anzahl zur gewünschten millisekunde anfordern.

Ist aber schwachsinn, wozu sollte man, dank caches buffern ect, ist es sinnfrei
 
T

tuxedo

Gast
Dieser Ansatz gefällt mir aber nicht, da so ja der Download bis zum Erreichen des Limits auf voller Geschwindigkeit läuft, um danach komplett zu stoppen, dann wieder voller Download, kompletter Stop, voller Download, etc. pp.

Wenn du den Zeitintervall den du zwischen den Messungen machst zu groß wählst dann ist das wohl in der Tat so. Wenn du aber <1sek wählst, dann sollte das in den wenigsten Tools die die Downloadgeschwindigkeit anzeigen erkennbar sein.
 

haimat

Mitglied
Ok, danke für alle Vorschläge. Ich löse das Problem nun mit einer Kombination aus Überprüfung auf max. Anzahl von Bytes / sec und kleinen Schlafpausen mehrmals pro Sekunde...

VG, Matthias
 

Neue Themen


Oben