Corso di Raku / Programmazione funzionale, concorrente, reattiva e web / Programmazione web / Un semplice server HTTP
Rispondere a una richiesta
Una volta che un client si è connesso, leggi la sua richiesta e invii una risposta. Per un browser web la risposta deve essere HTTP valido: una riga di stato, intestazioni facoltative, una riga vuota e poi il corpo.
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;La risposta rispecchia il formato della richiesta che hai visto dal
lato client. HTTP/1.0 200 OK è la riga di stato,
Content-Type: text/plain è un’intestazione, la riga vuota
(\r\n\r\n) chiude le intestazioni, e
Hello, web! è il corpo che il browser mostra.
Esegui questo programma, poi colpiscilo da un altro terminale con
curl (o apri http://127.0.0.1:8080/ in un
browser), e stampa il corpo dritto sullo schermo:
$ curl http://127.0.0.1:8080/
Hello, web!Questo gestisce una sola richiesta e poi si ferma. Per servire molte
richieste avvolgeresti i passi .accept-leggi-rispondi in un
ciclo, e tipicamente gestiresti ogni connessione su un proprio thread o
promise così che i client lenti non blocchino gli altri. Ma l’essenza di
un server web è esattamente questa: accetta una connessione, leggi la
richiesta, scrivi una risposta HTTP.
La pagina successiva fa proprio questo: un server che resta vivo, ciclando per rispondere a una richiesta dopo l’altra invece di fermarsi dopo la prima.
Navigazione del corso
← Quiz — In ascolto | Servire molte richieste →
💪 Oppure vai direttamente all’esercizio
di questa sezione.