tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
NEIN
ANTWORTEN
16
ZUGRIFFE
551
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Dann sollte Folgendes möglich sein, Vorgehen eigentlich identisch zu der AJAX-Lösung.

    Skript A(aufgerufen per Cronjob) sendet keine Mails, es fragt nur per stream(fsockopen etc.) Skript B ab, übergibt dabei wieder die ID des nächsten Datensatzes.
    Skript B holt x Datensätze, und antwortet mit der ID des nächsten Datensatzes....Skript A führt den nächsten Request aus wieder mit der ID als Parameter....uswusf.

    Dass Skript B nicht zu lange läuft, kann man ja steuern z.B. über Erfahrungswerte bei den in 30sec verarbeitbaren Datensätzen/Mails

    Skript A wird nicht zu Lange laufen, da die Zeit, bis die Antwort auf die Anfrage kommt, nicht zur Skriptlaufzeit zählt.
     

  2. #17
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Hier das PHP-Äquivalent: (hab mal alles Beschriebene in eine einzige Datei gepackt)
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    
    <?php
      //HTTP-Adresse ...anpassen!
      $http='http://example.com/skript.php';
     
        //Skript B, per HTTP angefordert, id als Parameter
      if(!empty($_GET['id']) && intval($_GET['id']))
      {
        $id=intval($_GET['id']);
        
          //kleine Simulation
          if($id<100)
          {
            //Hier macht dein Skript, was es zu tun hat
            sleep(40);
            //Rückgabe ist ein JSON-String mit Member id, 
            //der id des Datensatzes, bei dem das nächste SELECT starten soll
            die(json_encode(array('id'=>($id+10))));
          }
            //Falls nix mehr in DB, für ID NULL zurückgeben->ENDE
            die(json_encode(array('id'=>NULL)));
      }
        //Skript A, per Cronjob aufgerufen
      elseif(!isset($_GET['id']))
      { 
        
        $start=time();
        $ex=0;
        $id=1;
        echo '<pre>Request ID#'.sprintf("%3.6d",$id);
        flush();
        while($id && $f=file_get_contents($http.'?id='.$id))
        {
          $now=microtime(true);
          flush();
          $f=json_decode($f);
          if(is_object($f) && !empty($f->id))
          {
            $id=$f->id;
            echo '-&gt;Done(Run-Time:'.sprintf("%4d",time()-$start).'sec/Execution-Time:'.sprintf("%1.6f",$ex).'sec)</pre><pre>Request ID#'.sprintf("%3.6d",$id);
            $ex+=sprintf("%1.6f", (microtime(true)-$now));
          }
          else
          {
            $ex+=sprintf("%1.6f", (microtime(true)-$now));
            die('-&gt;Done(Run-Time:'.sprintf("%4d",time()-$start).'sec/Execution-Time:'.sprintf("%1.6f",$ex).'sec)</pre><strong>Complete</strong>');
          }
        }
      }
      
     
    ?>

    ...beim Testen kann man gut beobachten, dass da noch seeeeeehr viel Zeit übrig bleibt
     

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 15.12.09, 11:31
  2. Mehrfache Datenausgabe
    Von Gunah im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 20.02.08, 22:56
  3. Skriptausführung aussetzen
    Von FunkyMonkey im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 29.07.07, 20:54
  4. Skriptausführung vor Login ! Wohin damit
    Von reweiss im Forum Linux & Unix
    Antworten: 1
    Letzter Beitrag: 26.05.06, 05:44
  5. Mehrfache Verknüpfung
    Von fruehbeet im Forum Microsoft Windows
    Antworten: 3
    Letzter Beitrag: 21.09.01, 13:57

Stichworte