Maxwell: Eigener Webserver

Beitrag lesen

Hallo Siechfred

In Perl IO::Socket. Allerdings bietet Perl keine native Socket-Unterstützung, sondern greift via Socket.pm auf die entsprechenden C-Bibliotheken zu.

I know.

Ein Webserver basiert ausschließlich auf dem Client-Server-Prinzip. Wie um alles in der Welt hast du einen Webserver programmiert, wenn dir dieses Prinzip unklar ist?

Ist mir durchaus bekannt. Du hast mich nicht verstanden, oder ich hab mich undeutlich ausgesprochen. Mir geht es *nicht* um einen Webserver alla:

my $s = IO::Socket::INET(...);

while (my $c = $s->accept()) {
    my $p = fork();
    if (defined($p)) {
        if ($p==0) {
           # mach was mit $c
        }
    }
}

Also reines Client-Server-Prinzip, sondern etwas wie:

my $s = IO::Socket::INET(...);

preforking workers

our @workers = ();
for ( my $i=0; $i<10; $i++ ) {
    my $p = fork();
    if (defined($p)) {
        # mach pipe/socket zum worker...
        $workers[$i] = $pipe;
    }
}

sub let_it_handle_by_worker($$) {
    my ($client,$worker_id) = @_;
    # was steht hier, wie kann ich den worker den request
    # per pipe abarbeiten lassen und die Response direkt zum
    # client schicken (so dass der Hauptprozess der die
    # Verbindungen entgegennimmt nicht arbeiten muss)??????
}

while ( my $c = $s->accept() ) {
    let_it_handle_by_worker($c, int((rand()*10)) % 10)
}

das ist meine Frage. Klar?

Via HTTP, schau dir also die Details dieses Protokolles an. Einen guten Einstieg bietet die wikipedia:
http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol

Ja, ja, kenn ich im Schlaf.

Ansonsten schau dir mal an, wie es andere gemacht haben:
http://www.rblasch.org/studies/cs629/pa3/index.html

Nice and easy.

Grüsse,

Maxwell