Курс языка программирования 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-сервер   |   Тест — Ожидание соединений


💪 Или перейдите сразу к упражнению этого раздела.