Nun, da diese Antwort wirklich allgemein ist, hier ist ein sehr einfacher Ansatz für Plain TCP:
Sie setzen die Ressourcen-Handler aller Download-Verbindung in eine Liste, gepaart w Informationen darüber, welche Daten angefordert werden, und Schleife durch sie. Dann schreibst du einen Teil der benötigten Daten auf den Sockel, vielleicht etwa 1,5K, was die bekannteste maximale Segmentgröße ist, soweit ich weiß. Wenn Sie auf der Liste sind, fangen Sie von vorne an. Bevor Sie neu beginnen, warten Sie einfach auf die gewünschte durchschnittliche Bandbreite.
Wenn zu viele Clients eine niedrigere Bandbreite haben, als Sie zulassen, wird der TCP-Puffer wahrscheinlich explodieren. Einige TCP-Bindungen erlauben es, die Größe der aktuell gepufferten Daten für einen Socket zu finden. Wenn es einen Schwellenwert überschreitet, können Sie den Socket einfach überspringen.
Wenn zu viele Clients angeschlossen sind, haben Sie nicht genug Zeit, um alle Sockets zu schreiben. Nach einer Schleife müssen Sie also "auf eine negative Zeit warten". Das Erhöhen der Chunk-Größe könnte in solchen Szenarien die Dinge beschleunigen, aber irgendwann wird Ihr Server nicht schneller.
Ein einfacherer Ansatz besteht darin, dies auf der Client-Seite zu tun, aber dies kann viel Overhead verursachen. Die einfache Idee ist, dass der Client 1K alle 50ms anfordert (vorausgesetzt, Sie wollen 20KB/s). Sie können dies sogar über HTTP tun, obwohl ich eine größere Chunk-Größe dringend vorschlage, da HTTP enorme Kosten verursacht.
Meine Vermutung ist, am besten ist es, einen Webserver zu finden, der solche Dinge out-of-the-box machen kann. Ich denke, Apache hat eine Reihe von Modulen für alle Arten von Quoten.
greetz
back2dos
müssen Sie präziser sein. Was ist das Szenario? Wen soll die Download-Geschwindigkeit einschränken? der eines bestimmten Benutzers oder tatsächlich der gesamte Upload des Servers? Warum willst du die Geschwindigkeit begrenzen? usw. – back2dos
@ back2dos Ich denke, dass "warum .." Teil ist irrelevant und wird sowieso nicht helfen. Bezüglich des Szenarios - darum bitte ich hier :). –
ok, "warum" ist teilweise irrelevant. Die Frage ist: Was wollen Sie erreichen, was ist Ihr aktuelles Problem und was ist die gewünschte Lösung? und welche Mittel siehst du passend? Welchen Server benutzen Sie? Ohne genauer zu sein, würde ich sagen, der einfachste Weg ist, deinen Server in Neuseeland zu hosten: P also, um eine vernünftige Antwort zu bekommen, könntest du wenigstens so freundlich sein zu sagen, welchen Webserver du benutzt? und was "Grenze" bedeutet? Möchten Sie eine gleichmäßige Verteilung zwischen Benutzern erreichen? muss es HTTP sein? und so weiter. – back2dos