PHP - ¿Como ejecutar tareas en segundo plano o delegarlas a otra aplicación?

   
Vista:

¿Como ejecutar tareas en segundo plano o delegarlas a otra aplicación?

Publicado por Diego (4 intervenciones) el 17/09/2015 23:55:08
Si ingresas ciertos servicios y solicitas al servidor hacer alguna tarea como generar un archivo o algo parecido, si es una tarea que tomará mucho tiempo el servidor la ejecuta de algún modo en segundo plano y al terminar te notifica.

Esto ayudaría en cierta forma a lidiar con el tiempo de ejecución al ejecutar tareas extensas.

¿como funciona esto?, ¿es algún tipo se aplicación o servicio sobre el cual debería leer?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Vainas

¿Como ejecutar tareas en segundo plano o delegarlas a otra aplicación?

Publicado por Vainas (254 intervenciones) el 19/09/2015 11:54:21
Buenas:

Yo sobre esto tendria que realizar pruebas ya que hay de todo. To comento lo que yo conozco:

1. fork: Como C y otros lenguajes fork es una instruccion que te permite crear hilos dentro de tu programa (recuerda que aqui programa es el documento que se esta ejecutando actualmente). Lo malo de fork es que cuando el padre finaliza su funcion los hijos tambien deberian finalizar, no estoy seguro como puede llegar a funcionar que el padre finalice primero. Empieza por http://php.net/manual/es/function.pcntl-fork.php y ya apartir de aqui puedes buscar ejemplos.

2. Acabar con la conexion: puedes enviar todos los datos al cliente y terminar la conexion con el pero el programa quedarse haciendo sus cosas. Yo empezaria por aqui: http://php.net/manual/en/features.connection-handling.php. Lo interesante de esto es aprender a usar estas funciones:

ob_end_flush();
flush();
ob_end_clean();

En el orden que recomienden en algun ejemplo y vaciar y cerrar el buffer al cliente para luego seguir haciendo lo que necesitas.

3. Uso de la shell: Simplemente ejecutar un programa desde el prompt o consola y no esperar a que termine (en linux creo que se suele colocar & comando para que se ejecute en segundo plano). tienes dos funciones: http://php.net/manual/es/function.exec.php y http://php.net/manual/es/function.shell-exec.php

Otra opcion y lo que esta de moda es llamar a un webservice pero la descarto ya que no se puede hacer asincronamente asi que tendrias que recurrir a opciones como la 3ra o usando curl asincronamente: http://www.paul-norman.co.uk/2009/06/asynchronous-curl-requests

Y la ultima pero no he trabajado con ella pero que sepas que existe: http://php.net/pthreads Son hilos o threads en php pero tambien hay que tener en cuenta que funcionará como fork y hay que mirar que sucede cuando acaba de ejecutarse tu programa.

Espero que sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar