Downloadspeed begrenzen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Downloadspeed begrenzen

    Hi Leute, dadurch, dass ich mitlerweile haufen Besucherzahlen auf meiner Webseite habe, wollte ich die Downloads für die Gäste nicht mit Fullspeed anbieten, sondern nur für die Members. Um den Server ein wenig zu entlasten.
    Da ich die Downloads per header anbiete, habe ich es mit folgender Lösung probiert:
    PHP-Code:
    <?php
    .....
    if(isset(
    $my_u_id))
    {
    @
    readfile($dl);
    } else 
    {
        
    $speed 20;
           
    $fd fopen($dl"r");
           while(!
    feof($fd)) 
        {
           echo 
    fread($fdround($speed*1024*2));
           
    flush();
           
    sleep(1);
         } 


    ......
    ?>
    Demnach geht das Runterladen, wenn man angemeldet ist, mit Fullspeed, im anderen Fall fängt es mit 30K zu laden und sinkt mit der Zeit, bis am Ende ein DL von 5KB ist :/
    Ich wollte mal nachfragen, wie ich es abändern könnte, dass ein stavbiles DL von 50 KB ist ?
    Klar, wenn ich die Sleepzeit auf 0.05 ändere geht es schneller, aber die DL Rate sinkt trotzdem und ich habe Angst, dass bei 200 MB grossen Dls man am Ende nur 2KB hat o.ä.
    Hat jemand nen Rat?
    Zuletzt geändert von archie; 29.09.2005, 12:20.

  • #2
    hat es hier schon mal gegeben: http://www.php-resource.de/forum/sho...threadid=58761
    bei ihm hat's anscheinend geklappt... deswegen vermute ich, dass es auch am server und an der verbindung liegen kann. teste erst mal mit verschiedenen browsern/rechner/anschlüssen/providern und auf verschiedenen servern.

    Kommentar


    • #3
      Ein anfängliches Absinken der Übertragungsrate wirst immer beobachten, das liegt daran:

      Sobald du auf den Downloadlink klickst bekommst ja erstmal einen Dialog, wo du auswählen kannst ob du die Datei öffnen oder speichern willst und im Fall dass du 'speichern' wählst kommt auch noch der Dialog, wo du angeben musst wo du die Datei überhaupt hinspeichern willst - während dieser Zeit beginnt der Browser aber bereits mit dem Download der Datei - die Download-speed berechnet er aber erst ab dem Zeitpunkt, wo der Speicherort der Datei ausgewählt ist und die Fortschrittsanzeige erscheint.

      Dadurch hat der Browser meinetwegen mittlerweile schon 50 KB downgeloadet - rechnet dieses aber nur auf meinetwegen eine Sekunde um - zeigt also eine anfängliche Downloadspeed von 50 KB/sek an - je weiter der Download voranschreitet, umso mehr bewegt sich aber die angezeigte Speed in Richtung des tatsächlichen Wertes - von diesem 'abfallen' der Speed am Anfang darfst dich also nicht beirren lassen - Teste mit größeren Dateien verschiedene Einstellungen und gehe immer auf den Wert, den du zum Schluss des Downloades hin angezeigt bekommst.
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar


      • #4
        während dieser Zeit beginnt der Browser aber bereits mit dem Download der Datei
        kann ich so nicht bestätigen. gerade ausprobiert - rechte maustaste, speichern unter - kurz netzwerkaktivität verzeichnet (die ganzen header etc), danach - netzwerkstille. 1 min. gewartet - nichts wird übertragen. endlich den pfad ausgewählt, bestätigt, der download ging los.

        Kommentar


        • #5
          Naja, bringt mich auch nciht weiter, da er im Prinzip das gleiche Script verwendet.
          Die DL Gerschwindigkeit geht immer runter.
          Wenn ich bei sleep eine Zahl unter 1 nehme, dann hat das ganze Null auswirkung

          Kommentar


          • #6
            Evtl. ist das Verhalten hier von Browser zu Browser unterschiedlich

            Bei mir werden in jedem Fall schonmal ca. 50 KB einer Datei runtergeladen bevor ich auf 'speichern' usw. geklickt hab. Hab daher tatsächlich bei meiner ISDN-Verbindung (ich arme Sau - kein DSL auf dem Land ) zum Beginn eines Downloads eine Anzeige von 40 - 50 KB pro Sekunde, was mit ISDN natürlich unmöglich ist - erst im weiteren Verlauf bei größeren Dateien bewegt sich die Anzeige auf einen realistischen Wert von 7,8 KB/sek zu.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              Ja das das DL schnell beginnt ist normal, weil es was mit TCP Flushen zu tun hat, Der Server sendet TCP Pakete erst mit einer hohen Rate und guckt, ob der Client diese verwirft, wenn das der Fall ist, wird die Datenrate erniedrigt und noch mal versucht, bis die Pakete nicht verworfen werden.
              Jedoch hat es mit dem Script wenig zu tun. Da egal, was ich bei $speed nehme, wird die Geschwindigkeit auf 8 KB runtergehen...

              Kommentar


              • #8
                ich bleibe beim vorschlag - erst mal ausführlich testen.

                Kommentar


                • #9
                  Habs jetzt noch mal auf die Art probiert:
                  PHP-Code:
                  <?php
                  ...
                  if(isset(
                  $my_u_id))
                  {
                  @
                  readfile($dl);
                  } else 
                  {
                      
                  $speed 5;
                         
                  $fd fopen($dl"r");
                      
                  $count 1;
                         while(!
                  feof($fd)) 
                      {
                      
                          if(
                  $count%2!=0)
                          {
                          
                  flush();
                             
                  sleep(1);
                          
                  $buffer = @fread($fd$speed*1024); 
                            echo 
                  $buffer;
                          }
                          else 
                          {
                          
                  flush();
                          
                  sleep(0.5);
                          
                  $buffer = @fread($fd$speed*1024*2); 
                            echo 
                  $buffer;
                          }
                          
                          
                  $count++;
                          
                      } 
                       
                  }    

                  ....
                  ?>
                  Leider ist die Geschwindigkeit immernoch am Ende zu low, geht aber nicht so schnell runter, wie vorhin.

                  Kommentar


                  • #10
                    nur eine kleine anmerkung:
                    http://de3.php.net/manual/en/function.sleep.php#54587

                    Kommentar


                    • #11
                      J das habe ich auch schon mitbekommen

                      Kommentar

                      Lädt...
                      X