Финальный проект: создание многопоточного веб-сервера
Это был долгий путь, но мы дошли до финала книги. В этой главе мы создадим ещё один проект для демонстрации некоторых концепций, которые мы рассмотрели в последних главах, а также резюмировать некоторые предыдущие уроки.
Для нашего финального проекта мы создадим веб-сервер, который говорит “hello” и выглядит как рисунке 20-1 в веб-браузере.
Рисунок 20-1: Наш последний совместный проект
Вот наш план для создания веб-сервера:
- Узнать немного о протоколах TCP и HTTP.
- Прослушивать TCP соединения у сокета.
- Разобрать небольшое количество HTTP-запросов.
- Создать правильный HTTP ответ.
- Улучшите пропускную способность нашего сервера с помощью пула потоков.
Прежде чем мы начнём, мы должны упомянуть одну деталь: метод, который мы будем использовать, не будет лучшим способом создания веб-сервера на Rust. Члены сообщества уже опубликовали на crates.io несколько готовых к использованию крейтов, которые предоставляют более полные реализации веб-сервера и пула потоков, чем те, которые мы создадим. Однако наша цель в этой главе — помогать вам учиться, а не идти по лёгкому пути. Поскольку Rust — это язык системного программирования, мы можем выбирать тот уровень абстракции, который нам подходит, и можем переходить на более низкий уровень, что может быть невозможно или непрактично в других языках. Поэтому мы напишем базовый HTTP-сервер и пул потоков вручную, чтобы вы могли изучить общие идеи и методы, лежащие в основе крейтов, которые могут пригодиться вам в будущем.