2009-08-06 35 views
15

¿Hay alguna forma sensata de realizar una solicitud HTTP de forma asincrónica en PHP sin descartar la respuesta? Es decir, algo similar a AJAX: el script PHP inicia la solicitud, lo hace y luego, cuando se recibe la respuesta, una función/método de devolución de llamada u otro script maneja la respuesta.Solicitudes HTTP asíncronas en PHP

Un enfoque ha cruzado por mi mente, engendrando un nuevo proceso php con otro script para cada solicitud, el segundo script hace la solicitud, espera la respuesta y luego analiza los datos y hace lo que debería, mientras el script original va en el desarrollo de nuevos procesos. Sin embargo, tengo dudas sobre el rendimiento en este caso: debe haber alguna penalización en el rendimiento por tener que crear un nuevo proceso cada vez.

Respuesta

9

Sí, dependiendo del tráfico de su sitio, engendrar un proceso de PHP separado para ejecutar un script podría ser devastador. Sería más eficiente usar shell_exec() para iniciar un proceso en segundo plano que guarda la salida en un nombre de archivo que ya conoce, pero incluso esto podría requerir muchos recursos.

También podría tener una cola de solicitudes almacenada en una base de datos. Un único proceso de fondo separado extraería el trabajo, lo ejecutaría y guardaría el resultado, posiblemente configurando un indicador en el DB que su proceso web podría verificar.

Si va a utilizar el enfoque de la cola de DB, use la clase de funciones curl_multi * para enviar todas las solicitudes en cola a la vez. Esto limitará el tiempo de ejecución de cada iteración en su proceso en segundo plano al tiempo de solicitud más largo.