• Publicidad

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

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

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

Notapor monoswim » 2007-07-05 14:28 @644

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 ;-)

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 :oops:
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...
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Publicidad

Notapor creating021 » 2007-07-05 15:00 @666

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.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor monoswim » 2007-07-05 15:13 @676

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
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor explorer » 2007-07-05 18:25 @809

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
perl -MIO::All -e 'io(":8080")->fork->accept->(sub { $_[0] < io(-x $1 ? "./$1 |" : $1) if /^GET \/(.*) / })'
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Perl user » 2007-07-05 23:42 @029

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,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor monoswim » 2007-07-06 08:44 @405

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...:-)

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor Moraita » 2009-03-23 06:55 @330

Hola perleros.

Bueno, yo no intento ser una experta en cliente-servidor sino salir del paso, por lo tanto he seguido los pasos expuestos por explorer. Irme a ésa página maravillosa dónde te dan un montón de ejemplos y después de leerme la documentación de HTTP::Server::Simple, que por cierto ya lo tengo instalado.

Resulta que lo que yo quiero es un simple, muy simple servidor que escucha y un cliente que va enviando señales al servidor. O sea que con conectar con el servidor ya estaría enviando una señal.

La cuestión: que en la documentación de HTTP::Server::Simple no encuentro nada útil o al menos, el documentalista no da por hecho que el que lee el manual no tiene ni idea....

Sólo sé que haciendo lo siguiente, inició un servidor que se pone a la escucha en el puerto 8082:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
      my $server = HTTP::Server::Simple->new(8082);
      $server->run(8082);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


pero cuando intento detectar qué cliente se ha conectado o cual es mi localhost o cualquier cosa que no sea ejecutar servidor, ahí ya... no sé por dónde tirar. Quiero algo tan sencillo como lo implementado en http://www.linuxjournal.com/article/3237 para Listing 1 y ¿?, ni idea...

Por otro lado no viene nada de cómo se definiría un cliente cómo en el ejemplo de Listing 2.

En fin, ¡necesito una mano!

Gracias.
Moraita
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2008-10-29 10:25 @475

Notapor explorer » 2009-03-23 07:48 @367

Ya... pero es que precisamente por eso estamos en el foro Experto... porque se supone que las preguntas requieren un cierto nivel de destreza distinto del de un principiante...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Moraita » 2009-03-23 08:20 @388

Hola, experto,

Perdona, no me había dado cuenta de lo de experto. Encontré esta entrada del foro haciendo búsquedas sobre servidores y HTTP::Server::Simple, creí que debía seguir el hilo de esta entrada para no generar preguntas repetidas. De hecho cuando digo que la documentación de HTTP::Server::Simple no es suficiente para poder utilizarlo, me refiero a esa documentación y no a éste foro "experto".

De todas formas explorer, ¿he entendido bien tu respuesta? ¿te refieres a que no cuente con este foro o quizás te refieres a que lance la pregunta otra vez, pero desde la sección de "básico"...?

Simplemente como digo, me he leído la documentación de HTTP::Server::Simple y no sé por dónde cogerla excepto cómo poder arrancar el servidor.

Gracias por tu respuesta, realmente me has dejado de piedra si lo que venías a decir era eso: que no me meta en asuntos de "expertos".
Moraita
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2008-10-29 10:25 @475

Notapor explorer » 2009-03-23 08:55 @413

A ver, tranquila...

Quería decir que en el foro Experto puedes recibir respuestas "algo más elevadas" o "complicadas" que en el resto de foros, y a lo mejor te quedas igual que antes.

Por ejemplo, en el caso que comentas, la respuesta es que tienes que crear "hooks" o manejadores para tratar cada una de las peticiones que le llegan al servidor.

No pasa nada por crear nuevos hilos...


P.D. Yo tampoco soy experto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Avanzado

¿Quién está conectado?

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