Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Tīmekļa programmēšana / Vienkāršs HTTP serveris
Atbilde uz pieprasījumu
Tiklīdz klients ir pieslēdzies, jūs nolasāt tā pieprasījumu un sūtāt atbildi. Tīmekļa pārlūkam atbildei jābūt derīgam HTTP: statusa rinda, neobligātas galvenes, tukša rinda un tad ķermenis.
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;Atbilde atspoguļo to pieprasījuma formātu, ko redzējāt klienta pusē.
HTTP/1.0 200 OK ir statusa rinda,
Content-Type: text/plain ir galvene, tukšā rinda
(\r\n\r\n) noslēdz galvenes, un Hello, web! ir
ķermenis, ko pārlūks parāda.
Palaidiet šo programmu, tad no citas termināļa loga uzsitiet tai ar
curl (vai atveriet http://127.0.0.1:8080/
pārlūkā), un tā izdrukā ķermeni tieši uz ekrāna:
$ curl http://127.0.0.1:8080/
Hello, web!Tas apstrādā vienu pieprasījumu un tad apstājas. Lai apkalpotu
daudzus pieprasījumus, jūs .accept–nolasi–atbildi soļus
ietītu ciklā un parasti katru savienojumu apstrādātu savā pavedienā vai
solījumā, lai lēni klienti nebloķētu pārējos. Bet tīmekļa servera būtība
ir tieši šī: pieņem savienojumu, nolasi pieprasījumu, uzraksti HTTP
atbildi.
Nākamā lappuse dara tieši to — serveris, kas paliek dzīvs, ciklā atbildot uz vienu pieprasījumu pēc otra, nevis apstājoties pēc pirmā.
Kursa navigācija
← Viktorīna — Klausīšanās | Daudzu pieprasījumu apkalpošana →
💪 Vai arī dodieties tieši uz šīs sadaļas
vingrinājumu.