Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Tīmekļa programmēšana / Vienkāršs HTTP serveris / Exercises / Ceļš lielajiem burtiem
Risinājums: Ceļš lielajiem burtiem
Šeit ir iespējams risinājums uzdevumam.
Kods
my $listener = IO::Socket::INET.new(
:listen,
:localhost('127.0.0.1'),
:localport(8080),
);
loop {
my $conn = $listener.accept;
my $request = $conn.recv;
# "GET /hello HTTP/1.0" — ceļš ir otrais vārds; atmetam sākuma '/'
my $reply = $request.lines.first.words[1].substr(1).uc;
$conn.print("HTTP/1.0 200 OK\r\nContent-Type: text/plain\r\n\r\n$reply\n");
$conn.close;
}🦋 Atrodiet programmu failā text-response.raku.
Izvade
HELLOKomentāri
.recvnolasa pieprasījumu. Tā pirmā rinda irGET /hello HTTP/1.0;.words[1]izķer/hello, un.substr(1)atmet sākuma slīpsvītru, atstājothello..ucto pārvērš lielajos burtos, un tas kļūst par atbildes ķermeni. Atbilde tagad ir atkarīga no tā, ko klients prasīja, — serveris pieprasījumu apstrādā, nevis atgriež nemainīgu virkni.Viss pieņemšanas–nolasīšanas–atbildēšanas bloks atrodas
loopiekšienē, tāpēc serveris atbild uz vienu pieprasījumu pēc otra, nevis apstājas pēc pirmā. Apturiet to ar Ctrl-C.