Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Уеб програмиране / Основи на Cro
Маршрут в Cro
HTTP услугата в Cro се описва с набор от маршрути: всеки
маршрут казва кой URL обработва и какво връща. Изграждате ги вътре в
блок route с ключовата дума get:
use Cro::HTTP::Router;
use Cro::HTTP::Server;
my $application = route {
get -> 'hello' {
content 'text/plain', 'Hello from Cro!';
}
}
my $server = Cro::HTTP::Server.new(
:host('127.0.0.1'),
:port(8080),
:application($application),
);
$server.start;
say 'Listening on http://127.0.0.1:8080/hello — press Ctrl-C to stop';
react {
whenever signal(SIGINT) {
$server.stop;
done;
}
}Прочетете маршрута така: „заявка GET за пътя
hello връща текста Hello from Cro!“. Функцията
content задава и типа на съдържанието, и тялото — никакви
ръчни редове за състояние или \r\n на хоризонта.
Cro::HTTP::Server свързва маршрутите с адрес и порт, а
.start започва обслужването.
Една тънкост: .start не блокира — той
стартира услугата във фонови нишки и се връща веднага, а ако програмата
просто свършеше дотук, сървърът щеше да изчезне заедно с нея. Живa
програмата държи завършващият блок react, а той е стар
познат: whenever signal(SIGINT) откликва на сигнала за
прекъсване (Ctrl-C на клавиатурата), като спира сървъра и извиква
done. Реактивните средства от по-рано в тази част са точно
начинът, по който програма на Cro чака, обслужва и се затваря чисто.
Този пример се нуждае от инсталиран Cro (
zef install cro). Изпълнете го, отворетеhttp://127.0.0.1:8080/hello, а когато приключите — спрете сървъра с Ctrl-C.
Не се тревожете, ако сървърът от време на време отпечата
Cannot write to a closed socket, докато разглеждате. Това не е грешка във вашия код: клиент — обикновено браузър — е отворил връзка и я е зарязал, без да прочете отговора, както браузърите редовно правят със спекулативни или отменени заявки. Cro отбелязва изчезналия клиент, а сървърът продължава да обслужва.
Маршрутът може да приема сегменти от URL като параметри, да връща JSON и много други неща, но формата винаги е тази: обяви какво прави всеки път, подай маршрутите на сървър и го стартирай. В сравнение със сървъра върху сурови сокети от предишния раздел, Cro премахва цялото протоколно счетоводство и ви оставя да пишете само онази част, която е присъща на вашата услуга.
Този маршрут обаче винаги казва едно и също. Следващата страница
позволява на маршрута да прочете параметър от URL
адреса, така че един маршрут да поздравява /hello/Anna и
/hello/Bob различно.
Навигация в курса
← Тест — Cro | Маршрут с параметър →
💪 Или преминете направо към упражненията в този
раздел.