phpbar.de logo

Mailinglisten-Archive

[php] register_shutdown_function ...

[php] register_shutdown_function ...

Andreas Lange andreas.lange at haas-media.de
Fre Apr 23 15:22:44 CEST 2004


Friedhelm Betz wrote:
> On Friday 23 April 2004 13:55, Andreas Lange wrote:
>> Andreas Lange wrote:
>> > folgendes Miniscript: -- snip --
>>
>> Warum ich das brauche:
>>
>> 2 Webserver mit PHP sollen miteinander kommunizieren. Der Ablauf soll
>> folgendermassen sein:
>>
>> Server1 fordert Server2 auf die Datenbestände zusammenzusammeln
>>
>> Server2 meldet ein OK zurück und beginnt die Daten aufzubereiten
>> (kann sehr lang dauern)
>>
>> Server1 fängt direkt nach dem OK an regelmässig Server2 zufunken um
>> rauszubekommen, ob das Datenaufbereiten fertig ist, wenn nicht, wird
>> via Ausgabe an den Browser der Wartestatus zurückgeliefert
>> (javascript).
>>
>> Meldet Server2, das alles bereitsteht, dann holt sich Server1 die
>> Daten ab.
>>
>> Der ganze Vorgang wird von einem Benutzer über den Browser auf
>> Server1 gestartet.
>>
>> Gibts es hierfür eventuell einen einfacheren Ansatz?
>>
>> Server1 sitzt in einem Intranet und kann mit Server2 nur via Proxy
>> kommunizieren.
>>
>> Bin für alle Ansätze offen

> Auf Server 1 eine Endlosschleife laufen lassen, innerhalb derer 
> regelmaessig de Status von Server 2 abgefragt wird. 
> Abbruch der Schleife, wenn Server 2 fertig ist und dann Daten abholen.

Hmm ... im Grunde genommen mache ich es schon so. Server1 sendet an
Server2 einen Request zum Datenaufbereiten und geht dann in eine
Schleife. sieht bei mir im Source so aus:

// daten anforden
echo 'REQUEST DATA:  ';
if (!$rep->requestDataFromServer($key,'00000000000000')) gracefulExit($rep);
echo '<span style="color:#008000">OK</span><br />';

// loop until server ready
$start = time();
echo 'SERVER READY?: ';
while('FETCHING_DATA' == $rep->getStatusFromServer($key)) {
        sleep(5);
        if ((time()-$start) > 5*60) {
                // timeoutfehler (5 Minuten)
                gracefulExit($rep);
        }

        // browser beschäftigen, damit kein timeout der eigenen
        // Seite stattfindet
        echo '.';
        flush();
}
echo '<span style="color:#008000">OK</span><br />';

echo 'TRANSFER DATA: ';
if (!$import = $rep->getDataFromServer($key)) gracefulExit($rep);
echo '<span style="color:#008000"> OK</span><br />';

das requestDataFromServer sollte sich _sofort_ zurückmelden, macht es
aber nicht wg. dem vorher genannten mit dem register_shutdown_function
Problem.

Mit kleinen Testdatenstämmen ist das kein Problem. Aber der erste
Testlauf mit ca. 30MB aufzubereitenden Daten (ca. 3 Minuten
Verarbeitungszeit), gibt es natürlich sofort Timeouts. Und die will
ich natürlich verhindern.

-- 
Andreas Lange


php::bar PHP Wiki   -   Listenarchive