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.

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

  1. Немного узнать о TCP и HTTP.
  2. Слушать TCP-соединения на сокете.
  3. Разбирать небольшое количество HTTP-запросов.
  4. Создать правильный HTTP-ответ.
  5. Улучшить пропускную способность нашего сервера с помощью пула потоков.
Снимок экрана веб-браузера, который посещает адрес 127.0.0.1:8080 и отображает веб-страницу с текстовым содержимым “Hello! Hi from Rust”

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

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

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

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