Финальный проект: создание многопоточного веб-сервера

Это был долгий путь, но мы дошли до финала книги. В этой главе мы создадим ещё один проект для демонстрации некоторых концепций, которые мы рассмотрели в последних главах, а также резюмировать некоторые предыдущие уроки.

Для нашего финального проекта мы создадим веб-сервер, который говорит “hello” и выглядит как рисунке 20-1 в веб-браузере.

hello from rust

Рисунок 20-1: Наш последний совместный проект

Вот наш план для создания веб-сервера:

  1. Узнать немного о протоколах TCP и HTTP.
  2. Прослушивать TCP соединения у сокета.
  3. Разобрать небольшое количество HTTP-запросов.
  4. Создать правильный HTTP ответ.
  5. Улучшите пропускную способность нашего сервера с помощью пула потоков.

Прежде чем мы начнём, мы должны упомянуть одну деталь: метод, который мы будем использовать, не будет лучшим способом создания веб-сервера на Rust. Члены сообщества уже опубликовали на crates.io несколько готовых к использованию крейтов, которые предоставляют более полные реализации веб-сервера и пула потоков, чем те, которые мы создадим. Однако наша цель в этой главе — помогать вам учиться, а не идти по лёгкому пути. Поскольку Rust — это язык системного программирования, мы можем выбирать тот уровень абстракции, который нам подходит, и можем переходить на более низкий уровень, что может быть невозможно или непрактично в других языках. Поэтому мы напишем базовый HTTP-сервер и пул потоков вручную, чтобы вы могли изучить общие идеи и методы, лежащие в основе крейтов, которые могут пригодиться вам в будущем.