Raku-Kurs / Funktionale, nebenläufige, reaktive und Web-Programmierung / Web-Programmierung / Ein einfacher HTTP-Server
Auf eine Anfrage antworten
Sobald ein Client sich verbunden hat, lesen Sie seine Anfrage und senden eine Antwort. Für einen Webbrowser muss die Antwort gültiges HTTP sein: eine Statuszeile, wahlweise Header, eine leere Zeile und dann der Rumpf.
my $listener = IO::Socket::INET.new(
:listen,
:localhost('127.0.0.1'),
:localport(8080),
);
my $conn = $listener.accept;
my $request = $conn.recv;
$conn.print("HTTP/1.0 200 OK\r\nContent-Type: text/plain\r\n\r\nHello, web!\n");
$conn.close;
$listener.close;Die Antwort spiegelt das Anfrageformat wider, das Sie auf der
Clientseite gesehen haben. HTTP/1.0 200 OK ist die
Statuszeile, Content-Type: text/plain ist ein Header, die
leere Zeile (\r\n\r\n) beendet die Header, und
Hello, web! ist der Rumpf, den der Browser anzeigt.
Führen Sie dieses Programm aus und sprechen Sie es dann aus einem
anderen Terminal mit curl an (oder öffnen Sie
http://127.0.0.1:8080/ in einem Browser), und es gibt den
Rumpf unmittelbar auf dem Bildschirm aus:
$ curl http://127.0.0.1:8080/
Hello, web!Das bedient eine einzelne Anfrage und hört dann auf. Um viele
Anfragen zu bedienen, würden Sie die Schritte
.accept-lesen-antworten in eine Schleife hüllen und meist
jede Verbindung auf einem eigenen Thread oder Promise abwickeln, damit
langsame Clients die anderen nicht aufhalten. Doch das Wesen eines
Webservers ist genau dies: eine Verbindung annehmen, die Anfrage lesen,
eine HTTP-Antwort schreiben.
Die nächste Seite tut genau das — ein Server, der am Leben bleibt und in einer Schleife eine Anfrage nach der anderen beantwortet, statt nach der ersten aufzuhören.
Kursnavigation
← Quiz — Lauschen | Viele Anfragen bedienen →
💪 Oder springen Sie direkt zur Übung zu
diesem Abschnitt.