Met PHP downloadsnelheid aansturen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • we_are_borg
  • Registratie: September 2000
  • Laatst online: 15-09 09:28

we_are_borg

You will Comply

Topicstarter
Ik ben momenteel bezig om downloads op mijn site te zetten alleen wat ik me afvraagt of het mogelijk is om met behulp van php de snelheid te beinvloeden. Zodat memebers een iets hogere snelheid hebben als gasten.

Alleen wat ik niet kan vinden is of dit werkt met php of dat je een andere techniek dient te gebruiken. Ook wat zijn de voor en nadelen van zo systeem en beinvloed het de server niet te veel.

You need the computing power of a P1, 16 MB RAM and 1 GB Harddisk to run Win95. It took the computing power of 3 Commodore 64 to fly to the Moon. Something is wrong here, and it wasn't the Apollo.


Acties:
  • 0 Henk 'm!

  • raoulduke
  • Registratie: Oktober 2003
  • Niet online

raoulduke

Get in!

PHP genereert documenten, ik denk dat je je webserver zal moeten throttlen. Voor Apache kan je mod_throttle gebruiken, of mod_bandwidth. Misschien kan je met twee poorten werken: een gecapte en een uncapped voor de members?

Remember, if you have any trouble you can always send a telegram to the Right People.


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Volgens mij kun je de complete file met PHP wel inladen en dan dmv flush(); (of ob_flush(); ) steeds per seconde zoveel bytes terug sturen naar de bezoeker. En dit dus per bezoeker (member of guest) anders.. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Denk wel dat dat kan.
Als je je downloads doorgeeft in je eigen while-lusje:
PHP:
1
2
3
4
while(!feof($fd)) {
     $buffer = fread($fd, 2048);
     print $buffer;
}

In dat lusje kan je dan gebruik maken van usleep() en microtime() om te zorgen dat er per seconde maar een bepaalde hoeveelheid bytes worden doorgegeven.

Acties:
  • 0 Henk 'm!

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 19-09 17:00
Krijg je dan geen corrupte data. Loopt het geheugen ook niet vol?

[ Voor 5% gewijzigd door FlowinG op 12-10-2004 16:58 ]


Acties:
  • 0 Henk 'm!

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 19:57

Kees

Serveradmin / BOFH / DoC
Ja dat kan. Doormiddel van een usleep nadat je een bepaald aantal bytes hebt doorgegeven.
De snelheid is dan maximaal $bufsize / (1.000.000 * $speed) per seconde. Als je de speed op bijvoorbeeld 100.000 zet in het onderstaande voorbeeld haal je dus maximaal 81920 bytes / seconde. Het hangt er natuurlijk ook vanaf hoe hoog de snelheid van de gebruiker is die download (als hij al 1 seconde doet over die 8192 bytes dan is zijn snelheid in theorie slecht 4096 bytes / s)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
        /* 
            $true_filesize = ammount of data really submitted
            $bufsize = how much to read every time
        */

        $bufsize = 8192;
        $true_filesize = 0;
        $speed = 1000000; // usleep = 1 sec, max 8192 bytes/s
        while (($buf = fread($fp, $bufsize)) && !(connection_aborted())) {
            echo $buf;
            usleep($speed);
            flush();
            $true_filesize += strlen($buf);
        }
?>

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Acties:
  • 0 Henk 'm!

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 19:57

Kees

Serveradmin / BOFH / DoC
FlowinG schreef op 12 oktober 2004 @ 16:58:
Krijg je dan geen corrupte data. Loopt het geheugen ook niet vol?
mijn voorbeeld komt rechtreeks van files.tweakers.net, heb de laatste tijd niemand gehoort over corrupte data ;)

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Kees schreef op 12 oktober 2004 @ 16:59:Het hangt er natuurlijk ook vanaf hoe hoog de snelheid van de gebruiker is die download (als hij al 1 seconde doet over die 8192 bytes dan is zijn snelheid in theorie slecht 4096 bytes / s)
Dat kan ondervangen door met microtime() de tijd die echo en flush duren te meten. Daarmee kan je de waarde voor usleep() compenseren.
Pagina: 1