2009-08-06 12 views
15

Czy istnieje jakiś rozsądny sposób na wykonanie żądania HTTP asynchronicznie w PHP bez wyrzucania odpowiedzi? Np. Coś podobnego do AJAX - skrypt PHP inicjuje żądanie, robi to samo, a później, gdy odpowiedź zostanie odebrana, funkcja/metoda wywołania zwrotnego lub inny skrypt obsługuje odpowiedź.Asynchroniczne żądania HTTP w PHP

Jedno podejście przyszło mi do głowy - wystawianie nowego procesu php za pomocą innego skryptu dla każdego żądania - drugi skrypt wykonuje żądanie, czeka na odpowiedź, a następnie analizuje dane i robi wszystko, co powinien, podczas gdy oryginalny skrypt idzie o spawnowaniu nowych procesów. Mam jednak wątpliwości co do wydajności w tym przypadku - za każdym razem, gdy trzeba stworzyć nowy proces, musi istnieć pewna kara za wydajność.

Odpowiedz

9

Tak, w zależności od ruchu w Twojej witrynie, oddzielny proces PHP do uruchamiania skryptu może być katastrofalny. Bardziej wydajne byłoby użycie powłoki shell_exec(), aby rozpocząć proces w tle, który zapisuje dane wyjściowe do pliku, który już znasz, ale nawet to może wymagać dużej ilości zasobów.

Można również umieścić kolejkę żądań w bazie danych. Pojedynczy, oddzielny proces w tle może pobrać zadanie, wykonać je i zapisać dane wyjściowe, prawdopodobnie ustawiając flagę w bazie danych, którą może sprawdzić Twój proces WWW.

Jeśli zamierzasz zastosować podejście kolejki DB, użyj funkcji curl_multi * dla wysyłania wszystkich żądań oczekujących w kolejce jednocześnie. Spowoduje to ograniczenie czasu wykonywania każdej iteracji w procesie w tle do najdłuższego czasu żądania.

Powiązane problemy