Foros del Web » Programación para mayores de 30 ;) » Programación General »

CGI y tiempo de espera web

Estas en el tema de CGI y tiempo de espera web en el foro de Programación General en Foros del Web. Hola a todos, Soy nuevo en esta web y, bastante novato en el mundo web. Supongo q lo notaran por el vocabulario q uso. Tengo ...
  #1 (permalink)  
Antiguo 24/01/2007, 13:13
 
Fecha de Ingreso: enero-2007
Mensajes: 22
Antigüedad: 17 años, 3 meses
Puntos: 0
CGI y tiempo de espera web

Hola a todos,

Soy nuevo en esta web y, bastante novato en el mundo web. Supongo q lo notaran por el vocabulario q uso.

Tengo un problema:
tengo un formulario en html donde se suben archivos txt. El formulario llama a un cgi q recoge los datos y los envia al system para q un programa en perl los analice. Luego el mismo cgi enlaza los resultados del perl.

Resumiendo: html->cgi(perl)->perl->resultados en web
Esto en: windows y apache.

Mi problema está en q cuando el programa perl tarda mucho en analizar los datos , el tiempo de espera de la web se agota y deja a medias la impresión de los resultados (no imprime el enlace final a un archivo de texto producido por el perl).

Como puedo augmentar ese tiempo de espera? únicamente para esta web.

si no és buena idea como podría conseguir el enlace?

otra idea sería q el programa perl enviara los resultados por correo... pero no se si megusta esta solución.

Gracias por vuestra ayuda,
  #2 (permalink)  
Antiguo 24/01/2007, 13:39
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Re: CGI y tiempo de espera web

Pero lo estás ejecutando en un servidor web público ? o sea con más usuarios que vos ? porque talvés podrías hacerlo en algún horario que el server esté más desocupado...

Para aumentar el tiempo de ejecución de un script debes ver la seguridad del apache, seguramente será este el que corte el proceso...

Si te envía los resultados por correo estás en la misma, porque el proceso tarda mucho que no te llegará bien el mail...

Habría que ver que es lo que está haciendo el script de PERL porque no creo que tarde tanto, generalmente el tiempo de ejecución permitido es un minuto y yo nunca tuve un script que dure más de 20 segundos, la media es menos de 1 !!!

Espero que te sirva

Saludos
PD: Lo mejor sería separar el proceso en subprocesos y fijarte si lo puedes ahcer en disntintos horarios...
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 24/01/2007, 13:47
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Re: CGI y tiempo de espera web

Flope:
Eso parece un problema de configuracion del Apache:
A continuacion una copia desde dentro del archivo conf. del Apache:

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 60

Esta parte del conf. del Apache te dice los segundos que debe esperar el Apache para la segunda peticion del mismo cliente sobre la misma coneccion.
Es decir que si no hay peticion en 60 segundos, la coneccion se cae!.
Sube el valor y revisa bien, creo que hay otras similares pero no iguales.
En tu caso creo que con esta basta. No estoy 100% seguro! por cuanto nunca lo he probado!!!.
Forosdelweb utiliza este sistema para evitar que un forista permanezca conectado por mucho tiempo sobre algo que no requiere mas que unos pocos segundos; te desconecta automaticamente, provocando que vuelvas a ingresar nombre de usuario y contraseña; esto tambien evita la mala utilizacion del ancho de banda; es una medida Efectiva y altamente eficiente.
Saludos
Y espero te sirva
Franco
  #4 (permalink)  
Antiguo 24/01/2007, 14:03
 
Fecha de Ingreso: enero-2007
Mensajes: 22
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: CGI y tiempo de espera web

Cita:
Iniciado por monoswim Ver Mensaje
Pero lo estás ejecutando en un servidor web público ? o sea con más usuarios que vos ? porque talvés podrías hacerlo en algún horario que el server esté más desocupado...

Para aumentar el tiempo de ejecución de un script debes ver la seguridad del apache, seguramente será este el que corte el proceso...

Si te envía los resultados por correo estás en la misma, porque el proceso tarda mucho que no te llegará bien el mail...

Habría que ver que es lo que está haciendo el script de PERL porque no creo que tarde tanto, generalmente el tiempo de ejecución permitido es un minuto y yo nunca tuve un script que dure más de 20 segundos, la media es menos de 1 !!!

Espero que te sirva

Saludos
PD: Lo mejor sería separar el proceso en subprocesos y fijarte si lo puedes ahcer en disntintos horarios...
A ver si te puedo aclarar algo más. Por ahora no hay problema con el server. 100% mio. Llamo a la web dentro de la misma red. CGI no tarda nada solo recoge la información de los archivos y ejecuta un programa perl con la funcion system ("programa <archivos").
Seguro q el problema es de timeout determinado por el apache.

El programa perl hace varios cálculos que si lo corro en mi ordenador puede tardar en analizar los datos entre 3 y 20 minutos (o incluso más), dependiendo del volumen del input. El problema de q tarde tanto también reside en que dentro del mismo perl hay otro system ("otro programa en C") q puede llegar a repetir 2000 veces o más (esto depende del input).

Por eso digo q si pudiera alargar el tiempo de espera de la web, lo solucionaria.Se puede hacer sin cambiar configuración apache?
O bien q fuese el programa perl q corre en system q cuando acabase enviara resultados por e-mail, no?
o pedir a la web q hiciera un reload de vez en cuando para ver si los resultados ya estan....

Gracias.
  #5 (permalink)  
Antiguo 24/01/2007, 14:08
 
Fecha de Ingreso: enero-2007
Mensajes: 22
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: CGI y tiempo de espera web

Cita:
Iniciado por franco190453 Ver Mensaje
Flope:
Eso parece un problema de configuracion del Apache:
A continuacion una copia desde dentro del archivo conf. del Apache:

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 60

Esta parte del conf. del Apache te dice los segundos que debe esperar el Apache para la segunda peticion del mismo cliente sobre la misma coneccion.
Es decir que si no hay peticion en 60 segundos, la coneccion se cae!.
Sube el valor y revisa bien, creo que hay otras similares pero no iguales.
En tu caso creo que con esta basta. No estoy 100% seguro! por cuanto nunca lo he probado!!!.
Forosdelweb utiliza este sistema para evitar que un forista permanezca conectado por mucho tiempo sobre algo que no requiere mas que unos pocos segundos; te desconecta automaticamente, provocando que vuelvas a ingresar nombre de usuario y contraseña; esto tambien evita la mala utilizacion del ancho de banda; es una medida Efectiva y altamente eficiente.
Saludos
Y espero te sirva
Franco
UI, has respondido cuando contestaba el otro post. GRACIAS!!!!
Lo voy a probar.
Pero por cuestiones de seguridad como tu comentas, supongo q no es bueno q alargue ese tiempo. Por lo menos no hacerlo en todo el server. Si se puedese hacer solo para este CGI... No se si me explico... a lo mejor pido cosas q no tienen sentido...

Gracias las respuestas tan rápidas.
  #6 (permalink)  
Antiguo 25/01/2007, 12:58
 
Fecha de Ingreso: enero-2007
Mensajes: 22
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: CGI y tiempo de espera web

Bien funcionó! añadiendo en la conf del apache TimeOut xxxx
xxx->segundos d'espera max.

Esto puede perjudicar la seguridad? hay otras alternativas?

gracias por la ayuda.
  #7 (permalink)  
Antiguo 25/01/2007, 13:54
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Re: CGI y tiempo de espera web

20 minutos trabaja ese script ????

Y si programas una tarea en windows para que ejecute el script mismod desde windows, con lo cual no tend´ras el corte del apache...Y que los resultados te los tire por mail o los almacene...

Luego vos desde la web solo ves el resultado...

Espero que te sirva+

Saludos
__________________
Esteban Quintana
  #8 (permalink)  
Antiguo 25/01/2007, 18:14
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: CGI y tiempo de espera web

Tu mismo has dado la solución:
Cita:
O bien q fuese el programa perl q corre en system que cuando acabase enviara resultados por e-mail, ¿no?
o pedir a la web que hiciera un reload de vez en cuando para ver si los resultados ya están....
Eso requiere que tengas varios programas:
* Un CGI para recibir las órdenes y lanzar los procesos. Devolvería al usuario una página indicando si se arrancó bien.
* Un CGI para comprobar el estado de los procesos. Según lo que hagan tus programas, puede informar de la presencia de los programas corriendo o de los ficheros resultado. Esta parte es interesante porque se podría hacer con CGI::Ajax para hacer una recarga en tiempo real en la págin web del usuario.
* Un CGI para bajar los resultados.

Si nos damos cuenta... se puede realizar todo con el mismo CGI. Todo depende de las opciones que elijas en el formulario, el CGI podrá responder de una forma o de otra.
  #9 (permalink)  
Antiguo 26/01/2007, 09:18
 
Fecha de Ingreso: enero-2007
Mensajes: 22
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: CGI y tiempo de espera web

Muchas gracias! Ideas muy interesantes.

Puedo ser más o menos consciente de las soluciones pero no tengo suficientes conocimientos de web/cgi para solucionarlo.

Hasta ahora mis conocimientos de programación son sobre perl para analizar datos. Desconozco que es un script mismod???

Una idea q parece sencilla (si no entiendo mal):

web form --> cgi indicando inicio proceso correcto --> perl
Y un nuevo cgi comprobando cada cierto tiempo si hay archivo con resultados, si hay resultados imprimir enlace.

Podeis darme alguna información más como puedo hacer esto. Links o libros?
El mismo cgi q recoge los datos del formulario y lanza el perl puede ir comprobando si se ha generado un archivo de resultados sin q vuelva a caer en el problema del timeout?
En el mismo cgi se puede pedir q vaya haciendo reloads de la web cada cierto tiempo para impedir el timeout? Como?

Otra vez muchas gracias por tener paciencia con un nobato.
  #10 (permalink)  
Antiguo 26/01/2007, 09:30
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: CGI y tiempo de espera web

Un script es igual que un programa, pero más pequeño y cuyas funciones principales son las de hacer un pequeño procesamiento y lanzar otros procesos.

En las soluciones comentadas por mí no hay problema de timeout porque los CGI terminan enseguida. El cgi que lanza el proceso largo lo hace en background, por lo que puede devolver la información al usuario y terminar.

Las recargas de página son nuevas invocaciones del CGI. Lo que tienes que resolver es si es posible saber el estado del procesamiento de forma externa al propio proceso (por ejemplo, viendo como crecen los ficheros resultado). Si eso es posible entonces es fácil indicar el progreso al usuario. Si no existe el proceso en la lista de procesos, entonces es que ha terminado y se muestra el resultado directamente.
  #11 (permalink)  
Antiguo 26/01/2007, 12:06
 
Fecha de Ingreso: enero-2007
Mensajes: 22
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: CGI y tiempo de espera web

Entiendo lo que me explicais pero mis conocimientos són limitados.

Si el archivo de resultados va creciendo en Kb pero no siempre tiene el mismo tamaño final (depende del input).

Y si en la lista de processos claramente se puede ver si aun está activo.

El problema es q no se como crear un script q compruebe si aun está el proceso activo en la lista de processos. Y q ese mismo script luego recargue la página con los resultados.

gracias por vuestra paciencia,
  #12 (permalink)  
Antiguo 26/01/2007, 12:54
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Re: CGI y tiempo de espera web

eso es muy pero muy simple, digamos que tenemos dos archivos uno que tenga el estado del proceso y otro que tenga los resultados...

El archivo de ESTADO tendrá solo una palabra PROCESANDO O TERMINADO, simplemente tienes que leer esse archivo y dependiendo de lo que diga traes la info que necesites del TERMINADO...Por ejemplo

Código:
open(FILE, "<ESTADO.TXT");
   my $estado = <FILE>;
close(FILE);

if ($estado eq 'TERMINADO'){
   print "El proceso ha terminado, vea los resultados en www.misitio.com/resultados.txt";
}else{
   print "todavlia sigue procesando...";
}
Espero que te sirva

Saludos
PD: No olvidemos que al terminar el proceso tiene que cambiar el contenido del archivo ESTADO a TERMINADO
__________________
Esteban Quintana
  #13 (permalink)  
Antiguo 27/01/2007, 17:21
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: CGI y tiempo de espera web

Tienes más comentarios, de hoy mismo y en inglés, en la web de perlmonks.org.
  #14 (permalink)  
Antiguo 28/01/2007, 18:54
 
Fecha de Ingreso: enero-2007
Mensajes: 22
Antigüedad: 17 años, 3 meses
Puntos: 0
Sonrisa Re: CGI y tiempo de espera web

EI!!! Muchas gracias. Me han ayudado mucho vuestros comentarios y estoy aprendiendo mucho de ellos.

Lo he solucionado como sigue:

form html --> cgi recoje datos del form y llama (system) a un programilla en perl y genera un enlace una pagina con los resultados (cgi) --> en este cgi se indica el progreso del analisis y va haciendo un autorefresh o autoload cada x segundos para actualizar el progreso. Cuando ha acabado coloca el enlace al archivo de resultados y para el autorefresh.

Por cierto en perl, no puedes pasar el contenido de un filehandle a un string ($estado = <FILE>), no? pero si a un array (@estado = <FILE>),no?

GRACIAS
  #15 (permalink)  
Antiguo 28/01/2007, 19:26
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: CGI y tiempo de espera web

Si, sí que puedes hacer $estado = <FILE>;

Por defecto, estarás leyendo una línea de texto del fichero asociado a FILE.
  #16 (permalink)  
Antiguo 28/01/2007, 19:58
 
Fecha de Ingreso: enero-2007
Mensajes: 22
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: CGI y tiempo de espera web

Osea, q si no haces un loop solo lees la primera, no?
  #17 (permalink)  
Antiguo 28/01/2007, 20:25
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: CGI y tiempo de espera web

Leerás la línea que toque, es decir, donde esté mirando el puntero del filehandle. Si no has leído nada, pues entonces será la primera.
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 20:02.