Kurso de Raku / Funkcia, samtempa, reaktiva kaj reta programado / Reta programado / Simpla HTTP-servilo

Respondi al peto

Post kiam kliento konektiĝis, vi legas ĝian peton kaj sendas respondon. Por retumilo la respondo devas esti valida HTTP: statusa linio, laŭvolaj kapoj, malplena linio kaj poste la korpo.

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 respondo spegulas la petan formaton, kiun vi vidis ĉe la klienta flanko. HTTP/1.0 200 OK estas la statusa linio, Content-Type: text/plain estas kapo, la malplena linio (\r\n\r\n) finas la kapojn, kaj Hello, web! estas la korpo, kiun la retumilo montras.

Plenumu ĉi tiun programon, poste trafu ĝin el alia terminalo per curl (aŭ malfermu http://127.0.0.1:8080/ en retumilo), kaj ĝi presas la korpon rekte sur la ekranon:

$ curl http://127.0.0.1:8080/
Hello, web!

Ĉi tio traktas unu solan peton kaj poste haltas. Por servi multajn petojn, vi envolvus la paŝojn .accept-legi-respondi en buklon, kaj tipe traktus ĉiun konekton sur propra fadeno aŭ promeso, por ke malrapidaj klientoj ne bloku la aliajn. Sed la esenco de retservilo estas ĝuste ĉi tio: akcepti konekton, legi la peton, skribi HTTP-respondon.

La sekva paĝo faras ĝuste tion — servilo, kiu restas viva, buklante por respondi unu peton post la alia anstataŭ halti post la unua.

Kursa navigado

Kvizo — Aŭskultado   |   Servi multajn petojn


💪 Aŭ iru rekte al la ekzerco de ĉi tiu sekcio.