Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

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

В качестве финального проекта мы сделаем веб-сервер, который выводит «hello» и выглядит, как показано на Рисунке 21-1 в веб-браузере.

hello from rust

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

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

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

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

Во-вторых, мы не будем здесь использовать async и await. Создание пула потоков — это уже достаточно сложная задача, не говоря уже о построении асинхронного рантайма! Однако мы отметим, как async и await могут применяться к некоторым из тех же проблем, которые мы увидим в этой главе. В конечном счёте, как мы отмечали в Главе 17, многие асинхронные рантаймы используют пулы потоков для управления своей работой.

Поэтому мы напишем базовый HTTP-сервер и пул потоков вручную, чтобы вы могли понять общие идеи и техники, стоящие за крейтами, которые вы, возможно, будете использовать в будущем.