Foros del Web » Programando para Internet » PHP »

Procesos asincronos en php

Estas en el tema de Procesos asincronos en php en el foro de PHP en Foros del Web. Buenos dias, les escribo para consultares si es posible trabajar con procesos asincronos en php, acontinuacion les explico el problema que tengo: Los que sucede ...
  #1 (permalink)  
Antiguo 19/12/2011, 01:04
 
Fecha de Ingreso: julio-2010
Mensajes: 45
Antigüedad: 13 años, 9 meses
Puntos: 3
Procesos asincronos en php

Buenos dias, les escribo para consultares si es posible trabajar con procesos asincronos en php, acontinuacion les explico el problema que tengo:

Los que sucede es que tengo un procesos que es un cuello de botella y relentiza la ejecucion del proceso en general pondre un ejemplo para entenderlo mejor.

supongamos que tenemos el metodo saveNotification que lo que hace es enviar un correo al usuario involurado y guardar en base de datos la notificacion asi:

Código PHP:
saveNotification($notification){

$this->sendMail($notification); // cuello de botella
$this->notificationModel->save($notification);


Lo que quiero saber es como puedo hacer que se llame al metodo senMail y sin esperar que este termine inmediatamente se llame a la siguiente instrucion (save)
He visto que esto se puede hacer en otros lenguajes como java y me gustaria saber si esto es factible en php o que otra solucion me dan para evitar este cuello de botella y evitar que el tiempo total de ejecucion del metodo general dependa del metodo enviar mail que es el que demora mucho
  #2 (permalink)  
Antiguo 19/12/2011, 01:13
Avatar de dual3nigma
Colaborador
 
Fecha de Ingreso: febrero-2010
Ubicación: Ciudad de México
Mensajes: 295
Antigüedad: 14 años, 2 meses
Puntos: 122
Respuesta: Procesos asincronos en php

PHP no tiene "concurrency" y probablemente nunca lo tendrá, es el precio que hay que pagar por usar este lenguaje xD por decirlo de alguna manera, bueno simplemente no fue hecho con esto en mente.

Para dar una solución, creo que tendrías que comentarnos mas de lo que quieres hacer, queda claro que enviar una notificación, pero puedes dar mas detalles?

Saludos!
  #3 (permalink)  
Antiguo 19/12/2011, 02:37
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años
Puntos: 322
Respuesta: Procesos asincronos en php

¿Qué tal ejecutar la tarea más lenta en segundo plano?

Saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #4 (permalink)  
Antiguo 20/12/2011, 02:45
 
Fecha de Ingreso: julio-2010
Mensajes: 45
Antigüedad: 13 años, 9 meses
Puntos: 3
Respuesta: Procesos asincronos en php

Bueno lo que requiero hacer es poder ejecutar la siguiente instruccion sin tener la necesidad de esperar que la instruccion que le precede termine.

Sourcegeek me podrias explicar por favor como ejecutar una tarea en segundo plano??
  #5 (permalink)  
Antiguo 20/12/2011, 04:06
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: Procesos asincronos en php

En Linux, lo puedes hacer así:

Código PHP:
Ver original
  1. exec('/usr/bin/php -f scripAEjecutar.php  >/dev/null &')

Esto lo que hace es decirle al intérprete de PHP del equipo (cambia la ruta si está instalado en otro sitio), que ejecute un script que le especificas en el primer parámetro.

Luego, mirate la doc de CLI para tener mejor idea.

PD. El '>/dev/null &' se utiliza para que el exec no bloquee la salida al navegador ientras se ejecuta
  #6 (permalink)  
Antiguo 21/12/2011, 01:46
 
Fecha de Ingreso: julio-2010
Mensajes: 45
Antigüedad: 13 años, 9 meses
Puntos: 3
Respuesta: Procesos asincronos en php

El detalle es que no voy a ejecutar un script completo php sino solamente un metodo y por eso deseaba saber si no hay forma de llamar a ese metodo de forma asincrona
  #7 (permalink)  
Antiguo 21/12/2011, 01:55
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años
Puntos: 322
Respuesta: Procesos asincronos en php

¿Y por qué no creas un archivo php con ese método y lo ejecutas en segundo plano?
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #8 (permalink)  
Antiguo 26/12/2011, 10:01
 
Fecha de Ingreso: julio-2010
Mensajes: 45
Antigüedad: 13 años, 9 meses
Puntos: 3
Respuesta: Procesos asincronos en php

Bueno no hice eso porque romperia el patro de diseño que utilizo en el framework codeigniter.
Pero bueno si no hay otra ocion tendre que hacer eso, pero mi pregunta es como invoco a ese archivo desde php para que se ejecute en segundo plano
  #9 (permalink)  
Antiguo 26/12/2011, 14:48
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Procesos asincronos en php

Modifica un poquitin ese archivo y agrega un metodo adicional fuera de la clase ( para que se ejecute al ingresar al archivo php) que reciba por get el nombre del metodo y el parametro que deseas ejecutar,

NotificationModel.class.php?method=save&param=$not ification

Entonces asi lo ejecutasmrPidamente en segundo plano y no tienes que cambiar tu modelo.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #10 (permalink)  
Antiguo 26/12/2011, 17:57
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Procesos asincronos en php

Si el proceso es un envío por correo, te sugiero que "encoles" la tarea, es decir, que tu clase en vez de enviar el email lo guarde en una tabla de correos pendientes, para que con otra aplicación, posiblemente un cronjob, la envíe en cuanto pueda, adicionalmente, puedes hacer que si el envío es fallido quede registrado como una alerta al usuario para que en su siguiente visita o página lo vea.
  #11 (permalink)  
Antiguo 12/01/2012, 01:35
 
Fecha de Ingreso: julio-2010
Mensajes: 45
Antigüedad: 13 años, 9 meses
Puntos: 3
Respuesta: Procesos asincronos en php

Ok. Gracias :D

Etiquetas: procesos, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:14.