• Publicidad

PerlWebServer

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

PerlWebServer

Notapor davidferrero » 2009-08-12 06:54 @329

Buenas de nuevo, siento tantas preguntas pero es que soy muy novato en esto y solo espero que mis preguntas ayuden al resto.

Mi duda es la siguiente: necesito crear un servidor web, que muestre una página que contiene datos obtenidos con Perl y que se pueda acceder a un formulario que se gestiona mediante un cgi.

No puedo hacerlo mediante Apache, por lo que me veo creando uno, el caso es que buscando encuentro PerlWebServer.

Este servidor ofrece las características que he mencionado hasta ahora pero me encuentro con el problema de que se cae en el refresco de la página y si modifico el index.html con el servidor iniciado debo reiniciarlo porque sino no solo no muestra los cambios sino que sino no muestra nada.

El caso es que ofrece funciones y características interesantes como reporte de Log, fichero configuración, setup,...

El problema es que no encuentro mucha documentación sobre este servidor y es del 2000. Lo que me mosquea es no tener referencias de qué tal es, qué tal funciona, fiabilidad,... Sé que la otra opción, crearlo yo mismo, no es muy compleja si lo hago simple. He comprobado las librerías que puedo utilizar, sockets, daemon,... y varios módulos más disponibles.

Mi pregunta por tanto es la siguiente: ¿qué tal es este servidor PerlWebServer? Me interesa mirar bien la configuración para poder hacer que funcione para mis necesidades o me interesa por el contrario directamente utilizar algún módulo de Perl, y cuál en tal caso?
davidferrero
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-29 03:12 @175

Publicidad

Re: PerlWebServer

Notapor netsoul » 2009-08-12 08:34 @398

Supongo que podría depender de la necesidad :) . Particularmente no he probado PerlWebServer, pero sí algunos módulos como HTTP::Server::Simple, HTTP::Daemon, etc. hasta que me quedé con POE::Component::Server::HTTP.

Hace un tiempo había probado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use POE::Component::Server::HTTP;
  5.  
  6. POE::Component::Server::HTTP->new(Port => my $port = 8080,
  7. ContentHandler => {"/" =>  sub{$_[1]->push_header("Content-Type", "text/html"), $_[1]->content(<DATA>)}});
  8.  
  9. POE::Kernel->run();
  10.  
  11. __DATA__
  12. <html>
  13. <head>
  14. <title>¡Hola!</title>
  15. </head>
  16. </html>
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

¡Ah!, increíblemente, también con IO::All, en una línea:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash 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
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Re: PerlWebServer

Notapor davidferrero » 2009-08-13 01:37 @109

Ya había visto esas funciones. Lo que ocurre es que tengo un poco limitado el tema de instalar módulos sobre todo por temas de compatibilidad, aunque los mencionados son bastante genéricos, pero si pudiera hacerlo con algún modulo que estuviera preinstalado junto con Perl, como los sockets, pues mejor que mejor.

Es el caso de PerlWebServer que no necesita instalación de módulos adicionales, pero lo que me extraña y sobre manera es el hecho de que parece que fue un proyecto que quedó a medio hacer; no encuentro documentación alguna, me da problemas al refresco, y no sé... no me inspira mucha confianza y el problema que me encuentro es que no controlo Perl lo suficiente para encontrar posibles mejoras, o bueno, por lo menos que no me lleve un tiempo excesivo.

Por otra parte tengo hecho un servidor con sockets pero funciona de manera extraña: en ocasiones no me muestra toda la página, es decir, me muestra un trozo parcial, y sobre todo que no sé cómo hacer para que me funcione un formulario que gestiono bajo un CGI. Esta pregunta la traslado de un anterior tema mío.

Este sería mi servidor, el cual aunque funciona no lo hace del todo como me gustaría:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl -w
  2.  
  3. #LIBRERIAS
  4.  
  5. use strict;
  6. use warnings;
  7. use diagnostics;
  8. use IO::Socket;
  9.  
  10. require "FUNCTIONS.pl";
  11. require "MONITOR.pl";
  12.  
  13. #
  14. sub Wait{
  15. wait; #wait needed to keep <defunct> pids from building up
  16. }
  17.  
  18. $SIG{CHLD}=\&Wait;
  19.  
  20. my $server = IO::Socket::INET->new(
  21. PeerAddr => inet_ntoa(INADDR_BROADCAST),
  22. LocalPort=>680,
  23. Type=>SOCK_STREAM,
  24. Reuse=>1,
  25. Listen=>10) or die "$@\n";
  26. my $client;
  27.  
  28. #
  29.  
  30. while ( $client = $server->accept())
  31. {
  32. next if my $pid = fork;
  33. die "fork - $!\n" unless defined $pid;
  34. select $client;
  35. $|=1;
  36. print $client getHTML();
  37. close($client);
  38. exit(fork);
  39. }
  40. continue
  41. {
  42. close($client)or die "$@\n";
  43. kill CHLD=>-$$ or die "$@\n";
  44. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Este sería el apartado del formulario:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. print '<FORM METHOD="GET" ACTION="http://172.16.77.142:680/cgi-bin/gestion_formulario.cgi">
  2. #Codigo HTML del formulario
  3. print "\n".'<INPUT TYPE="SUBMIT" VALUE="Enviar datos">
  4. <INPUT TYPE="RESET" VALUE="Borrar">
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Me queda por tanto hacer en el servidor la parte que gestione el CGI que aun estoy en ello pero con ciertas dudas y el CGI sé que funciona bien puesto que en un servidor como Apache funciona y lo gestiona como quiero. Por eso quería ayudarme del PerlWebServer.

P.D: Acepto todo tipo de sugerencias para la mejora del servidor, las patadas a Perl o HTML que puedo dar lo siento, prometo mejorar.
davidferrero
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-29 03:12 @175

Re: PerlWebServer

Notapor explorer » 2009-08-13 03:02 @168

¿Que no puedes instalar módulos por problemas de compatibilidad?

Sorprendido estoy... Estamos hablando de Perl... no hay nada más compatible.

Podría haber problemas con módulos que necesiten de librerías escritas en C y por lo tanto necesitar de un compilador en el sistema para agregarlas a los módulos, pero en el caso de módulos de protocolos de red, la gran mayoría de ellos lo que hacen es usar el módulo y las funciones de sockets.

Esto me recuerda aquella empresa que me decía lo mismo: que no quería usar módulos de Perl para evitar tener que depender de terceros, y al mismo tiempo, permitía a sus programadores de Java bajarse e instalarse todas las librerías que les daba la gana.

En otra ocasión yo necesitaba un módulo algo exótico. Al principio me dijeron que no, pero les planteé el siguiente razonamiento:

* puedo bajarme el módulo, sin instalarlo
* puedo copiar las líneas que me interesan
* es más, como el código del módulo está escrito en puro Perl, puedo copiar todo el código del módulo porque no afecta al funcionamiento del resto de los programas
* entonces... ¿qué diferencia hay de hacer eso a instalar realmente el módulo?

Pues la gran diferencia es que en el primer caso (copiar el código), tendríamos que mantenerlo en el futuro, mientras que usando el módulo del autor, lo mantiene él.

Incluso si descubrimos errores en los módulos, podemos parchealos y enviar las soluciones a sus creadores.

Con respecto a PerlWebServer, si no ves nueva documentación es porque existen soluciones más modernas, y su autor habrá decidido dejar de mantenerlo. Puedes probar a enviarle un correo a ver si te responde.

Mira los módulos requeridos por HTTP::Server::Simple:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use FileHandle;
use Socket;
use Carp;
use URI::Escape;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Vamos, nada del otro mundo.

Y HTTP::Server::Simple::CGI solo utiliza a mayores el módulo CGI, que viene incluido de base.

Eso sí, tienes sus contras: según la documentación, no hace fork() ni thread, por lo que solo sirve para responder a un cliente cada vez, pero eso está bien cuando queremos hacer una aplicación de escritorio a partir de un CGI, por ejemplo.
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


Volver a Básico

¿Quién está conectado?

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