2009-08-06 18 views
15

Esiste un modo corretto per effettuare una richiesta HTTP in modo asincrono in PHP senza eliminare la risposta? Ad esempio, qualcosa di simile ad AJAX - lo script PHP avvia la richiesta, fa la sua stessa cosa e in seguito, quando la risposta viene ricevuta, una funzione/metodo callback o un altro script gestisce la risposta.Richieste HTTP asincrone in PHP

Un approccio mi è venuto in mente: generare un nuovo processo php con un altro script per ogni richiesta: il secondo script esegue la richiesta, attende la risposta e quindi analizza i dati e fa tutto ciò che dovrebbe, mentre lo script originale va sulla generazione di nuovi processi. Ho dei dubbi, però, riguardo alle prestazioni in questo caso: ci deve essere qualche penalità legata alle prestazioni dal dover creare un nuovo processo ogni volta.

risposta

9

Sì, a seconda del traffico del tuo sito, generare un processo PHP separato per l'esecuzione di uno script potrebbe essere devastante. Sarebbe più efficiente usare shell_exec() per avviare un processo in background che salva l'output in un nome di file che già conosci, ma anche questo potrebbe richiedere un uso intensivo delle risorse.

Si potrebbe anche avere una coda di richiesta memorizzata in un database. Un singolo processo in background separato estrarrà il lavoro, lo eseguirà e salverà l'output, eventualmente impostando un flag nel DB che il tuo processo web potrebbe controllare.

Se avete intenzione di utilizzare l'approccio coda di DB, utilizzare curl_multi * classe di funzioni per inviare tutte le richieste in coda in una sola volta. Ciò limiterà il tempo di esecuzione di ogni iterazione nel processo in background al tempo di richiesta più lungo.

Problemi correlati