Introducción
En una de mis rutinarias navegaciones por perlmonks.org, me encontré un tutorial bastante interesante. En cuanto termine de leerlo tuve la necesidad de traducirlo y ponerlo en el sitio.
El tutorial es de perlmonkey y lo pueden encontrar en su forma original aquí.
Como siempre hago al traducir un tutorial, le cambio ciertas palabras y explico con mayor detalle lo que siento que necesita mayor explicación.
Creando nuestro servidor
Es impresionante lo sencillo que es crear un robusto servidor que dejará a tus amigos y colegas con la boca abierta usando perl.
Para esto usamos el módulo IO::Socket, que nos da una sencilla interface orientada a objetos para tomar control de nuestros sockets.
Para empezar, nuestro servidor necesita un socket para escuchar, comúnmente llamado "listening socket", a este socket es a donde nuestros clientes se conectan. No es cosa del otro mundo crear este socket:
#creando un socket para escuchar
my $listen_socket = IO::Socket::INET->new(LocalPort => 8000,
Listen => 10,
Proto => 'tcp',
Reuse => 1);
Esto creará un socket para escuchar en el host local bajo el puerto 8000, usando el protocolo TCP. El parámetro "Listen" es el máximo de clientes que podemos tener en "queue" o cola. Y "Reuse" te permite reiniciar el puerto 8000. Estos son los parámetros básicos que usaremos.
Para manejar un cliente intentando conectar, la siguiente línea creará el socket para el cliente:
Aquí la variable $connection es un objeto de socket, que puede ser manejado como un objeto de archivo. Así que puedes imprimir o leer de él como lo harías con un archivo:
#leer del socket del cliente
my $message = <$connection>;
Lo siguiente que debemo que ver tiene que ver con el "fork" de nuestro servidor. Cuando un proceso hijo muere, no libera los recursos del sistema hasta que el proceso padre reconoce que esta muerto con la llamada de las funciones "wait" o "waitpid".
Como los servidores por lo general trabajan por mucho tiempo, y se terminan varios procesos hijos, se hace necesario asegurarnos de que el proceso padre se este enterando que los procesos hijos se están muriendo, si no se da cuenta el proceso padre, entonces los procesos hijos se convierten en "zombies".
Los servidores normalmente se la pasan la mayoría de su tiempo en la llamada "accept" esperando llamadas de nuevos clientes esperando conectarse. Pero el problema, es que también está esperando que los procesos hijos se mueran, entonces ¿cómo puede hacer el servidor dos cosas a la vez? Fácil: con señales.
Usuarios que han visto este tema también han visto...
- ¿Cómo enviar emails usando Perl y Sendmail?
- Variables y estructura de los datos en Perl
- ¿Cómo enviar emails usando Perl y Sendmail?
- PostgreSQL con perl en el WEB
- Fecha y Hora con Perl
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.