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