Moin!
Es ist halt etwas kompliziert aber wenn ich auf einer LAN bin und derzeit ein paar User ne Demo downloaden wollen dann bricht der Server regelmäßig ein und die Einer hat mehr Bandbreite als die Anderen
Es wird unmöglich sein, die Bandbreite nach deinen Maßstäben gerecht aufzuteilen. Dies liegt in der Technologie des Netzwerks begründet.
Bei einer Datenübertragung wie z.B. einem Download werden alle gesendeten Pakete vom Empfänger irgendwann quittiert, um den erfolgreichen Empfang zu signalisieren. Braucht der Empfänger oder das übermittelnde Netzwerk dafür bei einem Downloader wenig Zeit, und bei einem anderen mehr, dann wird die Downloadrate bei demjenigen, der schnell die gesendeten Pakete quittieren kann, hoch sein, weil der Server schnell neue Pakete nachschicken kann, während derjenige, der nur langsam quittiert, eben auch nur langsamer neue Pakete kriegt.
Also selbst wenn du für zwei Downloader 50% Datenrate wollen würdest - es würde vermutlich daran scheitern, dass das Netzwerk dir da einen Strich durch die Rechnung macht. Und ich denke nicht, dass es in deinem Sinn ist, dem einen Downloader nur 50% Datenrate zur Verfügung zu stellen, wenn der andere Downloader seine 50% nicht voll nutzt, sondern 30% ungenutzt übrig läßt.
Darüber hinaus ist noch die Frage zu stellen, welches Protokoll zum Download du benutzt. HTTP ist nicht unbedingt gut geeignet, FTP ist deutlich besser. Vielleicht solltest du auch mal ausprobieren, stattdessen nur einen Bittorrent-Tracker und einen entsprechenden Client zum seeden zur Verfügung zu stellen. Dann laden die beteiligten Clients auch gegenseitig voneinander runter. Denn keine LAN-Party schließt ihre Teilnehmer einfach stumpf alle an einen Switch, und die Backbones sind, obwohl vielleicht in 1GB oder 10GB ausgelegt, dann ggf. doch die Engstelle.
Jedenfalls: Für die Begrenzung von HTTP-Traffic im Apachen gibt es das Modul mod_bandwidth, mit dem du allerdings nach meinem Wissensstand (den ich jetzt nicht aktualisiert habe) nicht das tun kannst, was du willst, sondern "nur" nach gewissen Regeln den Traffic eines Clients nach oben begrenzen, damit (für andere) Bandbreite freibleibt - und zwar immer. Außerdem ist das Begrenzen von Bandbreite dann doch nicht so ganz einfach, jedenfalls ist dessen Realisierung nicht so, wie man sich das vielleicht vorstellt, analog zu einem Wasserhahn: Einfach zudrehen sorgt für Reduktion des Datenflusses. Auf digitaler Ebene ist auch die Bandbreite digital, d.h. über einen gewissen Zeitraum hinweg werden einfach nur X Pakete gesendet, und zwar mit maximaler Bandbreite. Wenn die weg sind, wird Pause gemacht.
Für die Begrenzung von FTP-Traffic hat eigentlich jeder vernünftige FTP-Server schon direkt Konfigurationsmöglichkeiten eingebaut. Check' deine Doku diesbezüglich.
Und PS: Dein Problem läßt sich nicht mit PHP lösen. PHP kommt an die notwendigen Stellen zur Einflußnahme gar nicht heran. Oder würde dabei nur wahnsinnig viele Ressourcen verbraten, so dass dein Server erst recht in die Knie geht.
- Sven Rautenberg
"Love your nation - respect the others."