Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Уеб програмиране / Прост HTTP сървър
Отговор на заявка
Щом клиент се е свързал, вие прочитате заявката му и изпращате отговор. За уеб браузър отговорът трябва да е валиден HTTP: ред за състояние, незадължителни заглавки, празен ред и после тялото.
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;Отговорът огледално повтаря формата на заявката, която видяхте от
страна на клиента. HTTP/1.0 200 OK е редът за състояние,
Content-Type: text/plain е заглавка, празният ред
(\r\n\r\n) завършва заглавките, а Hello, web!
е тялото, което браузърът показва.
Изпълнете тази програма, после я викнете от друг терминал с
curl (или отворете http://127.0.0.1:8080/ в
браузър) и тя отпечатва тялото направо на екрана:
$ curl http://127.0.0.1:8080/
Hello, web!Това обработва една-единствена заявка и спира. За да обслужвате много
заявки, бихте обвили стъпките .accept—четене—отговор в
цикъл и обикновено бихте обработвали всяка връзка в собствена нишка или
обещание, за да не блокират бавните клиенти останалите. Но същността на
уеб сървъра е точно това: приеми връзка, прочети заявката, напиши HTTP
отговор.
Следващата страница прави точно това — сървър, който остава жив и в цикъл отговаря на заявка след заявка, вместо да спре след първата.
Навигация в курса
← Тест — Слушане | Обслужване на много заявки →
💪 Или преминете направо към
упражнението към този раздел.