2010-11-21 10 views
16

¿Alguien puede mostrar un ejemplo simple sobre cómo usar la función fastcgi_finish_request()? Busqué en Google pero solo encontré una mención general, algunas personas dicen que lo usan con éxito, pero no pude encontrar un solo ejemplo con código.ejemplo de cómo usar fastcgi_finish_request()

Por ejemplo, tengo un objeto PHP. Para enviar una respuesta a un navegador genero HTML, luego devolviéndolo a través de getResult(). Luego repite el resultado.

De esta manera:

$obj = new controller(); 
echo $o->getResult(); 

Digamos que yo quiero tomar ventaja de esta técnica de optimización para enviar resultado al navegador y luego terminar un proceso potencialmente larga como la conexión a algunos API, como tal vez Facebook API.

¿Cómo voy a ir haciendo esto? Entiendo que, básicamente, puedo llamar al fastcgi_finish_request(); y luego continuar ejecutando el script php.

Solo necesito ver el código de ejemplo, no soy lo suficientemente inteligente como para resolverlo solo.

+0

Sé que requiere que php funcione como fastcgi con php-fpm. Ya lo tengo configurado de esta manera, usando php 5.3 como fastcgi y lighttpd como servidor web. – Dmitri

Respuesta

35

Entiendo que, básicamente, puedo llamar a fastcgi_finish_request(); y luego continuar ejecutando script php.

Sí, eso es todo lo que tienes que hacer.

$obj = new controller(); 
echo $o->getResult(); 
fastcgi_finish_request(); 
do_facebook_thing(); 

Para convencerse de que funciona, haga lo siguiente:

echo "Test"; 
fastcgi_finish_request(); 
sleep(10); 

Si se quita la segunda línea, a continuación, se verá que el navegador tiene que esperar 10 segundos.

+1

Buen ejemplo. Lo intenté y funcionó. – Dmitri

+0

Entonces, ¿se puede usar en lugar de hacer cola asynchrone para hacer "trabajos en segundo plano" (por ejemplo, enviar correos electrónicos)? –

+1

@ThomasDecaux, podría, pero aún estaría aferrado a un proceso web mientras se estaba ejecutando esa tarea. En última instancia, vale la pena utilizar una cola adecuada que esté completamente separada de los procesos web para bloquear las operaciones que no son necesarias para que se sirva la página. – Matthew

Cuestiones relacionadas