2009-08-06 2 views
15

Gibt es einen vernünftigen Weg, um eine HTTP-Anfrage asynchron in PHP zu machen, ohne die Antwort zu verwerfen? Das heißt, etwas Ähnliches wie AJAX - das PHP-Skript löst die Anfrage aus, ist eine eigene Sache und später, wenn die Antwort empfangen wird, behandelt eine Callback-Funktion/Methode oder ein anderes Skript die Antwort.Asynchrone HTTP-Anfragen in PHP

Ein Ansatz ist mir in den Sinn gekommen - einen neuen PHP-Prozess mit einem anderen Skript für jede Anfrage - das zweite Skript die Anfrage, wartet auf die Antwort und dann analysiert die Daten und tut was auch immer es tun sollte, während das ursprüngliche Skript geht neue Prozesse hervorbringen. Ich habe jedoch Zweifel an der Leistung in diesem Fall - es muss eine gewisse Leistungseinbuße bestehen, dass jedes Mal ein neuer Prozess erstellt werden muss.

Antwort

9

Ja, abhängig vom Datenverkehr auf Ihrer Website könnte ein separater PHP-Prozess zum Ausführen eines Skripts verheerend sein. Es wäre effizienter, shell_exec() zu verwenden, um einen Hintergrundprozess zu starten, der die Ausgabe in einem bereits bekannten Dateinamen speichert, aber auch dies könnte ressourcenintensiv sein.

Sie können auch eine Anforderungswarteschlange in einer Datenbank speichern. Ein einzelner, separater Hintergrundprozess würde den Job abrufen, ausführen und die Ausgabe speichern, möglicherweise indem er ein Flag in der DB setzt, das von Ihrem Webprozess überprüft werden kann.

Wenn Sie den Ansatz der DB-Warteschlange verwenden möchten, verwenden Sie die Klasse curl_multi *, um alle Anfragen in der Warteschlange auf einmal zu senden. Dies begrenzt die Ausführungszeit jeder Iteration in Ihrem Hintergrundprozess auf die längste Anfragezeit.