Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Como hacer un web server...ya tengo el deamon...

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto
Mensaje Jue Jul 05, 2007 1:28 pm
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Como hacer un web server...ya tengo el deamon... Responder citando

Hola, estoy haciendo un deamon, y se me generaron 2 dudas:

Me gustaría que pueda recibir peticiones desde la web...para que pueda imprimir información del sistema en formato HTML...Como se hace eso ?

Y la otra es como hacer para que tenga las opciones start restart y stop de linux Wink

El deamon lo hago con POSIX

Saludos
EDITADO: ya me bajé algunos scripts y demás, veo que usan el IO::socket pero no entiendo bien esa parte Embarassed
EDITADO2: El server solo toimaría unos pocos parámetros, puede ser GET, lo que me importa es que envíe info, no que reciba...
Mensaje Jue Jul 05, 2007 2:00 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 478
Ubicación: Frente al monitor
Responder citando

Hola.

Buno, hay una que otra forma de hacer "demonios", la más común es hacer el servidor y la otra hacer el controlador o hacerlo todo en uno.

Lo primero que haces es tomar las entradas (servidor -stop), si la entrada es para iniciar míras si existe en /var/run/nombre_de _servidor.pid, si existe el servidor no inicia y debe de dar un error.
Si no existe creas el archivo y pones el pid del servidor.
Al salir el servidor debe eliminar el archivo.

Para pararlo, habre el archivo, miras el pid y usas la kill(); luego eliminas el archivo.

Si es necesario, puedes usar chroot.

Modifica las "trap signals" para no tener problemas.
Mensaje Jue Jul 05, 2007 2:13 pm
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

bueno, buscando encontré un tutorial que habla algo sobre io::socket, dice que hay que usar el IO::Socket::INET...

Alguna recomendación...La documentación del cpan de esos módulos es realmente pobre...

Saludos
Mensaje Jue Jul 05, 2007 5:25 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Mientras que la recomendación de un experto sería que usaras POE, y yo estoy de acuerdo con eso, es una filosofía que tarda un tiempo en aprenderse.

Yo el mejor ejemplo de explicación de Networking con Perl la ví en la revista Linux Journal, en el 1999: Network Programming with Perl. Ya está un poco anticuado, con las nuevas formas de conexión, pero es perfectamente funcional. Abarca muchos aspectos de cómo crear servidores/clientes.

En libros, existe el "Network Programming with Perl" de Lincoln D. Stein, 2000, Addison Wesley, que trata casi todos los temas. En otros libros hay respuestas rápidas a algunos temas en concreto. Por ejemplo, en el Perl Cookbook hay un capítulo dedicado a esto, incluyendo el tema de daemons. Incluso creo que es de lo mejor que se ha escrito sobre este tema. Pero no deja de ser un poco farragoso para lo que pides.

Lo que tu dices que quieres hacer es un pequeño servidor web que responda con contenido estático, o con contenido dinámico, aunque sea un poco limitado. Eso se puede hacer en unos pocas líneas con los módulos que comentas, pero... para una cosa rápida no es necesario bajarse a tan bajo nivel. Al fin y al cabo, otras personas ya han hecho servidores web basados en esos módulos, como por ejemplo el HTTP::Server::Simple. En unas pocas líneas tienes un web server arrancado.

Y como colofón, naturalmente, el engendro creado por Graham y Damian: IO::All, que permite crear un servidor web, estático y dinámico, en una sola línea:
Perl:
perl -MIO::All -e 'io(":8080")->fork->accept->(sub { $_[0] < io(-x $1 ? "./$1 |" : $1) if /^GET \/(.*) / })'
Claro que esto hay que hacerlo en casos extremos, pero para salir del paso está muy bien. Incluso ejecuta CGI.

Yo te recomiendo que primero instales un servidor web como el HTTP::Server::Simple y que funcione, luego mirar el artículo de la Linux Journal y hacer pruebas. Y luego, con tiempo, hacerlo todo con POE. En la sección de Cookbook tienen algunos ejemplos de cómo hacer servidores web (al final de la página).
Mensaje Jue Jul 05, 2007 10:42 pm
Perl user
Maestro Honorario
Maestro Honorario
Registrado: 03 Nov 2004
Mensajes: 385
Responder citando

Qué tal,

Mira en lo personal creo que te estas (posiblemente a propósito, o con fines de hacerlo rápido) saltando MUCHOS conceptos claves para la creación de CUALQUIER aplicación cliente-servidor. El caso de un webserver no es la excepción.

En primera instancia debes comprender muy bien como se realiza el proceso de conexión entre dos sockets, obviamente tendrás que pararte a leer sobre el protocolo TCP/IP, para poder comprender conceptos como "handshaking", "timeouts", entre otras cosas.

Entonces... mucho antes de meterte con el protocolo HTTP o con servidores que acepten múltiples peticiones, realmente te recomiendo leer algún documento completo sobre sockets.

Si no encontraste información sobre IO::Socket es porque en realidad la información existente es tomada de otros recursos que una persona que use sockets ya debe conocer, y me refiero a la interfaz de BSD sockets en C. No estoy diciendo que tengas que aprenderte la interfaz en C, hablo de que tienes que conocer simplemente el ciclo de vida de un socket en general. Tanto por parte de un cliente, como por parte del servidor.

Así que... no importa que uses POE, IO::Socket, Socket.pm, Coro, Http::Simple, y TODOS esos módulos que ya te enlistaron. Seguirás en las mismas si realmente no comprendes los conceptos debajo de ello. Olvídate de daemons, http, peticiones concurrentes, procesos y todo eso por ahora. Enfócate a lo que es la comunicación con sockets.

Recomendaciones? Claro... el mejor libro, y no solo el mejor, sino la Referencia UNIVERSAL para esto es, Unix Network Programming de Addison Wesley, del autor (en paz descanse) Richard W Stevens. Excelente libro, con cobertura AMPLIA sobre todo lo relacionado a la programación de aplicaciones cliente-servidor, incluyendo multiprocesos, multiplexión, etc...

Ahora bien, ese libro te recomiendo leer por lo menos los primeros 3 o 4 capítulos, y luego pasarte al libro que te recomendó explorer "Network Programming with Perl" de Lincoln Stein. Libro que abarca como ya te mencionaron, conceptos básicos y algunos avanzados. Algunos capítulos ya están completamente obsoletos, pero la referencia allí está. Pero ese libro realmente te ayudará con la parte de Perl.

En serio... suena tedioso, pero el camino es el correcto, y si realmente quieres aprender te será divertido. Sino... si SOLO quieres hacer lo que tienes en mente sin realmente aprender, entonces... usa cualquier módulo que lo haga por tí.

Saludos,
Mensaje Vie Jul 06, 2007 7:44 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

Mil gracias a los 3 por responder...Ya mismo ayer estuve leyendo algunas cosas sobre sockets y servidores...Y me estoy copiando varios libros que mencionan para darles duro el fin de semana...

La idea es hacer mi propio servidor, no quiero usar un módulo ya programado, ya que tengo muchas ganas de aprenderlo...Smile

Saludos
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group