Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Веб-програмування / Простий HTTP-сервер

Очікування з’єднань

Щоб діяти як сервер, створіть сокет у режимі слухання з аргументом :listen, задавши адресу й порт, які слухати:

my $listener = IO::Socket::INET.new(
    :listen,
    :localhost('127.0.0.1'),
    :localport(8080),
);

:localhost('127.0.0.1') слухає на вашій власній машині, а :localport(8080) — це порт, до якого мають приєднуватися клієнти. Сокет тепер чекає, але жоден клієнт іще не прийшов.

Щоб узяти наступне вхідне з’єднання, викличте .accept. Він блокує виконання, аж поки не приєднається клієнт, а тоді повертає свіжий сокет, що представляє саме цю розмову:

my $conn = $listener.accept;
say 'a client connected';

$listener і далі слухає нових клієнтів, тоді як $conn є вашим каналом для розмови з цим конкретним. Справжній сервер викликає .accept у циклі, обробляючи кожного клієнта в міру його прибуття.

Ці приклади запускають на вашій власній машині; приєднуйтеся до них із браузера чи іншої програми за адресою 127.0.0.1:8080.

Отже, сервер — це просто повернутий навпаки сокет: замість :host/:port, щоб набрати назовні, ви даєте :listen разом із :localhost/:localport, щоб чекати на дзвінки всередину.

Практика

Виконайте 1 тест за змістом цієї теми.

Навігація курсом

Простий HTTP-сервер   |   Тест — Очікування з’єднань


💪 Або перейдіть одразу до вправи цього розділу.