ERLEDIGT
NEIN
NEIN
ANTWORTEN
16
16
ZUGRIFFE
551
551
EMPFEHLEN
-
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.
-
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 '->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('->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
-
[Dojo Toolkit] Skriptausführung warten lassen, bis der Inhalt der ContentPane gelade
Von marcel_m im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 15.12.09, 11:31 -
Mehrfache Datenausgabe
Von Gunah im Forum Relationale DatenbanksystemeAntworten: 8Letzter Beitrag: 20.02.08, 22:56 -
Skriptausführung aussetzen
Von FunkyMonkey im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 29.07.07, 20:54 -
Skriptausführung vor Login ! Wohin damit
Von reweiss im Forum Linux & UnixAntworten: 1Letzter Beitrag: 26.05.06, 05:44 -
Mehrfache Verknüpfung
Von fruehbeet im Forum Microsoft WindowsAntworten: 3Letzter Beitrag: 21.09.01, 13:57





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren