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. Покращити пропускну здатність нашого сервера за допомогою пулу потоків.
Screenshot of a web browser visiting the address 127.0.0.1:8080 displaying a webpage with the text content “Hello! Hi from Rust”

Рисунок 21-1: Наш фінальний спільний проєкт

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

По-друге, тут ми не будемо використовувати async і await. Створення пулу потоків — це і так достатньо складний виклик сам по собі, без додаткового створення async runtime! Однак ми зазначимо, як async і await можуть бути застосовні до деяких із тих самих проблем, які ми побачимо в цьому розділі. Зрештою, як ми зазначали ще в розділі 17, багато async runtime використовують пули потоків для керування своєю роботою.

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