asynchrone http-reply
am 02.10.2006 11:28:20 von Corinne
Hallo,
Ich rufe von einem Hauptprogramm aus mein php script auf, welches
einerseits seine http reply sendet und andererseits eine externe Seite
aufruft. Der zeitliche Ablauf ist nun so, dass immer zuerst die externe
Seite aufgerufen wird und dann das Hauptprogramm die Reply kriegt. Ich
möchte das aber ändern, so dass das Hauptprogramm zuerst die reply
kriegt, und dann mit einem zeitlichen Abstand (sleep) die externe Seite
aufgerufen wird. Ist das überhaupt möglich?
Vielen Dank für jede Hilfe,
Corinne
Re: asynchrone http-reply
am 02.10.2006 12:00:50 von dev-null-use-reply-adress
corinne schrieb:
> Ich rufe von einem Hauptprogramm aus mein php script auf, welches
> einerseits seine http reply sendet und andererseits eine externe Seite
> aufruft.
Ich bemühe mal meine Glaskugel. Du meinst so etwas:
// Hauptprogramm
echo "Hallo Welt";
// Externes Script
$ext = file_get_contents('http://example.org/script.php');
echo $ext;
?>
> Der zeitliche Ablauf ist nun so, dass immer zuerst die externe
> Seite aufgerufen wird und dann das Hauptprogramm die Reply kriegt. Ich
> möchte das aber ändern, so dass das Hauptprogramm zuerst die reply
> kriegt, und dann mit einem zeitlichen Abstand (sleep) die externe Seite
> aufgerufen wird. Ist das überhaupt möglich?
Wenn ich Dich richtig verstanden habe (s.o.): Nein, das geht nicht.
Falls es sich um eine Webseite handelt, binde das externe Script doch
einfach in einen Iframe ein. Das würde in etwa Deinen Wunsch erfüllen.
Ansonsten beschreibe Dein Problem bitte genauer und poste auch
etwas relevanten Code.
Gruß
JPM
Re: asynchrone http-reply
am 02.10.2006 15:16:22 von Corinne
Also, ich versuche, meinen Fall ein bisschen konkreter zu umschreiben,
ohne allzu sehr in die Details zu gehen : )
Das Hauptprogramm ist eine Java-Applikation zum Versand von SMS durch
einen Telecom-Operator. Dieser SMS-Sender schickt per http post request
die SMS and die Operator-URL und protokolliert darauf den Versand in
der Datenbank mit Status "verschickt". Anschliessend schickt der
Operator einen Rapport (alles per http) zurück an den SMS-Sender, der
angibt, ob die SMS erfolgreich verschickt wurde oder nicht. Anhand
dieses Rapports wird dann der Status des Versandes in der Datenbank des
SMS-Senders entsprechend aktualisiert, je nachdem auf "ausgeliefert"
oder "fehler".
Mein php Script, das wir zum testen des Hauptprogramms verwenden,
simuliert unter anderem diesen Operator, d.h. es kriegt eine
http-Anfrage und reagiert mit einem Rapport. Das Problem ist nun, dass
dieser zu schnell beim SMS-Sender ankommt, nämlich innerhalb desselben
Requests. Dies hat zur Folge, dass der SMS-Sender den Rapport bekommt,
bevor der Versand erstmalig in der Datenbank protokolliert wurde und er
findet demzufolge den Eintrag zum aktualisieren nicht.
Nun zu meiner Frage: Kann ich innerhalb meines Scripts den request
irgendwie vorzeitig abschliessen, damit ich dann ein sleep(n) einfügen
und erst nachher den Rapport verschicken kann? Alternativ könnte ich
natürlich die Rapporte, die zu verschicken sind, in einem externen
File speichern und dann mit einem Cron Job (task scheduler) später
verschicken, aber das möchte ich eben grad vermeiden wenn es geht.
Ich hoffe, meine Frage ist nun soweit klar, dass die Glaskugel nicht
mehr konsultiert werden muss!? Mit einem Zauberstab wär mir eh mehr
geholfen ;-)
Danke nochmals,
Corinne
Jens Peter Moeller schrieb:
> corinne schrieb:
>
> > Ich rufe von einem Hauptprogramm aus mein php script auf, welches
> > einerseits seine http reply sendet und andererseits eine externe Seite
> > aufruft.
>
> Ich bemühe mal meine Glaskugel. Du meinst so etwas:
>
>
> // Hauptprogramm
> echo "Hallo Welt";
> // Externes Script
> $ext =3D file_get_contents('http://example.org/script.php');
> echo $ext;
> ?>
>
> > Der zeitliche Ablauf ist nun so, dass immer zuerst die externe
> > Seite aufgerufen wird und dann das Hauptprogramm die Reply kriegt. Ich
> > möchte das aber ändern, so dass das Hauptprogramm zuerst die reply
> > kriegt, und dann mit einem zeitlichen Abstand (sleep) die externe Seite
> > aufgerufen wird. Ist das überhaupt möglich?
>
> Wenn ich Dich richtig verstanden habe (s.o.): Nein, das geht nicht.
> Falls es sich um eine Webseite handelt, binde das externe Script doch
> einfach in einen Iframe ein. Das würde in etwa Deinen Wunsch erfüllen.
>
> Ansonsten beschreibe Dein Problem bitte genauer und poste auch
> etwas relevanten Code.
>=20
>=20
> Gruß
> JPM