secuencialidad o no secuencialidad en el perl
Salvador Ortiz Garcia
sog@msg.com.mx
Sun, 17 May 1998 21:13:04 -0500 (CDT)
On Sat, 16 May 1998, Manuel Pérez López wrote:
> 1.- Coge los datos desde un formulario
> 2.- Redirecciona a otra pagina con la línea:
> print "Location: $redireccion\n\n";
> 3.- Envía un mensaje de correo a una lista integrada por varios
> cientos de personas.
>
> Sin embargo el programa no redirecciona en la fase 2 hasta que no ha
> terminado la fase 3, por lo que se lleva un tiempo considerable de
> espera.
La pregunta no es de perl sino de CGI, y ahí existe una laguna en la
especificación.
En Apache 1.2.X, al menos, el servidor 'bufferea' lo que recibe de un
script CGI hasta el momento de que éste cierra su STDOUT (a la salida) o
tiene un bloque aceptable que enviar al cliente.
Lamentablemente un "close(STDOUT)" no es suficiente para lo que quieres,
pues si bien el cliente en el navegador recibirá la redirección rápido, el
servidor se reserva el derecho de _matar_ al script CGI pues asume que se
quedó trabado.
Un solución fácil es hacer un script 'nph', pues en ese caso el servidor
no interviene, pero necesitas tu crear la respuesta completa, puedes hacer
una prueba con el scritp incluido al final (requerda que se debe de llamar
con prefijo 'nph-').
Una solución mas general y robusta (para no bloquear un slot en
la tabla de hijos del Apache) implicaria un 'fork'.
====== CORTA AQUI ========
#!/usr/bin/perl -w
# nph-redir.cgi
$|=1;
print "HTTP/1.0 302 Movido\r\n";
print "Location: http://www.msg.com.mx/\r\n\r\n";
print STDERR scalar(localtime),"Adios\n";
sleep(60);
print STDERR scalar(localtime),"Me quede corriendo\n";
exit(0);
========= FIN ===========
Saludos.
Salvador Ortiz
--------------------------------------------------------------------------
Matias Software Group (525) 256-0214
Soporte comercial para Linux y Apache en Mexico info@msg.com.mx
--------------------------------------------------------------------------