PDA

Visualizza la versione completa : webserver in perl?


Claudio Vituzzi
02-12-2004, 04:58
Allora...ho eseguito questo codice:



#!/perl
#
# Server

use strict;
use warnings;
use IO::Socket::INET;

my $answer;

my $server = IO::Socket::INET->new(LocalPort => '81',
Type => SOCK_STREAM,
Reuse => 1,
Listen => 1 ) || die "$!\n";

while ( my $client = $server->accept() ) {

print $client "The time is now: " . scalar(localtime(time())) . "\n";
close $client;

}

close($server);


ebbene l'ho eseguito,poi sono andato nel browser ed ho digitato: http://127.0.0.1:81
Il browser mi ha restituito la data corrente!

Vuol dire che in Perl potrei essere in grado di programmare un piccolo web server?
E a questo web server potrei fargli eseguire gli scripts .cgi?

ad esempio quando digito http://127.0.0.1:81/pages/page.html lo script mi restituisce: GET /pages/page.html HTTP1.1

Credo che intanto mi studiero un p il protocollo HTTP1.1

Ciao!

shishii
02-12-2004, 17:15
Certo che possibile, ma chiaramente le prestazioni sarebbero ridicole.

Claudio Vituzzi
03-12-2004, 04:08
che differenza c' tra:



while ( my $client = $server->accept() ) {

$answer = <$client>;
print $answer;
print $client "The time is now: " . scalar(localtime(time())) . "\n";
close $client;

}


e:



while ( $server->listen() ) {

$client = $server->accept();

$answer = <$client>;
print $answer;
print $client "The time is now: " . scalar(localtime(time())) . "\n";
close $client;

}


?

Claudio Vituzzi
03-12-2004, 06:57
potreste spiegarmi anche questo codice?



while ($client = $server->accept()) {
$client->autoflush(1);
print $client "Welcome to $0; type help for command list.\n";
$hostinfo = gethostbyaddr($client->peeraddr);
printf "[Connect from %s]\n", $hostinfo->name || $client->peerhost;
print $client "Command? ";
while ( <$client>) {
next unless /\S/; # blank line
if (/quit|exit/i) { last; }
elsif (/date|time/i) { printf $client "%s\n", scalar localtime; }
elsif (/who/i ) { print $client `who 2>&1`; }
elsif (/cookie/i ) { print $client `/usr/games/fortune 2>&1`; }
elsif (/motd/i ) { print $client `cat /etc/motd 2>&1`; }
else {
print $client "Commands: quit date who cookie motd\n";
}

} continue {
print $client "Command? ";
}
close $client;
}

Loading