Финальный проект создания Веб-сервера
Это был долгий путь, но мы достигли конца книги. В этой главе мы вместе создадим ещё один проект, чтобы продемонстрировать некоторые концепции, рассмотренные в финальных главах, а также повторим некоторые предыдущие уроки.
Для нашего финального проекта мы создадим веб-сервер, который говорит «Привет!» и выглядит в веб-браузере как на Рисунке 21-1.
Вот наш план по созданию веб-сервера:
- Изучим основы TCP и HTTP.
- Организуем прослушивание TCP-подключений на сокете.
- Реализуем разбор небольшого количества HTTP-запросов.
- Создадим корректный HTTP-ответ.
- Увеличим пропускную способность нашего сервера с помощью пула потоков.

Рисунок 21-1: Наш финальный совместный проект
Прежде чем мы начнём, следует упомянуть два момента. Во-первых, метод, который мы будем использовать, не является оптимальным способом создания веб-сервера на Rust. Участники сообщества опубликовали ряд готовых к использованию крейтов на crates.io, которые предоставляют более завершённые реализации веб-сервера и пула потоков, чем та, которую мы построим. Однако наша цель в этой главе — помочь вам учиться, а не пойти по лёгкому пути. Поскольку Rust является языком системного программирования, мы можем выбирать уровень абстракции, на котором хотим работать, и можем опуститься на более низкий уровень, чем это возможно или практично в других языках.
Во-вторых, мы не будем здесь использовать async и await. Создание пула потоков само по себе является достаточно сложной задачей без дополнительной необходимости создавать асинхронную среду выполнения! Однако мы отметим, как async и await могут быть применимы к некоторым проблемам, которые мы увидим в этой главе. В конечном счёте, как мы отмечали в Главе 17, многие асинхронные среды выполнения используют пулы потоков для управления работой.
Таким образом, мы напишем базовый HTTP-сервер и пул потоков вручную, чтобы вы могли изучить общие идеи и методы, лежащие в основе крейтов, которые вы, возможно, будете использовать в будущем.