• Publicidad

Funciones para no demorar la respuesta al usuario

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Funciones para no demorar la respuesta al usuario

Notapor Fernando » 2011-06-28 14:05 @628

¿Qué tal, gente? Les hago una consulta.

Tengo un script en Perl que atiende consultas de usuarios devolviéndoles las correspondientes respuestas.

Ahora bien, necesito guardar en una base de datos dichas consultas con las respectivas respuestas para ser analizadas luego (como auditoría).

Lo que me interesaría saber es cómo realizar el logging en la base de datos SIN demorar la respuesta. Es decir, escribir en una base de datos tiene una demora que puede ser mínima o no dependiendo de cuán sobrecargado esté el servidor de base de datos. Necesito enviar la orden de logueo sin demorar la respuesta al usuario.

¿Si lo armo con una función que no devuelva nada, el script principal se queda a la espera de que termine de ejecutar esa función? ¿o manda la orden y sigue su curso?

¿Existe alguna otra forma de realizarlo?

¡Muchas gracias de antemano!
Fernando
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2011-04-16 08:10 @382

Publicidad

Re: Funciones para no demorar la respuesta al usuario

Notapor explorer » 2011-06-28 14:26 @643

Lo normal es que la respuesta sea muy rápida, pero supongamos que el servidor esté muy saturado.

Una posibilidad que suelo hacer es "dialogar" con el usuario (enviarle la página HTML de resultado), y, cuando hemos terminado, cerramos el STDOUT, con lo que el control se devuelve al servidor web, y a continuación, podemos realizar las consultas de registro en la base de datos.

Hay un problema: si el programa se cae (porque la base de datos estaba muy ocupada, por ejemplo), no se registraría la actividad, pero aún así el usuario ya ha recibido la página del resultado.

Si la aplicación no es vital, podríamos asumir ese desfase. Si no... lo mejor es hacer lo tradicional: dialogar primero con la base de datos y según el resultado, informar al usuario.

En cuanto a lo que comentas, también es otra posibilidad, pero hay que realizarla con fork() (u otra técnica). Entonces, el proceso se divide en dos. El proceso padre sigue con la consulta a la base de datos, y luego se muere. Mientras, el proceso hijo se puede dedicar a hacer otras cosas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Funciones para no demorar la respuesta al usuario

Notapor Fernando » 2011-06-29 09:07 @421

Perfecto, me queda claro.

¡Muchas gracias!
Saludos./
Fernando
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2011-04-16 08:10 @382


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron