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

Projekt Końcowy: Budowanie Wielowątkowego Serwera WWW

To była długa podróż, ale dotarliśmy do końca książki. W tym rozdziale zbudujemy razem jeszcze jeden projekt, aby zademonstrować niektóre z koncepcji, które omówiliśmy w ostatnich rozdziałach, a także podsumować niektóre wcześniejsze lekcje.

Na nasz końcowy projekt stworzymy serwer WWW, który wyświetla „Witaj!” i wygląda jak na Rysunku 21-1 w przeglądarce internetowej.

Oto nasz plan budowy serwera WWW:

  1. Naucz się trochę o TCP i HTTP.
  2. Nasłuchuj połączeń TCP na gnieździe.
  3. Parsuj niewielką liczbę żądań HTTP.
  4. Utwórz poprawną odpowiedź HTTP.
  5. Popraw przepustowość naszego serwera za pomocą puli wątków.
Zrzut ekranu przeglądarki internetowej odwiedzającej adres 127.0.0.1:8080 wyświetlającej stronę internetową z treścią tekstową „Hello! Hi from Rust”

Rysunek 21-1: Nasz końcowy wspólny projekt

Zanim zaczniemy, powinniśmy wspomnieć o dwóch szczegółach. Po pierwsze, metoda, której użyjemy, nie będzie najlepszym sposobem na zbudowanie serwera WWW w Rust. Członkowie społeczności opublikowali wiele gotowych do produkcji pakietów dostępnych na crates.io, które dostarczają bardziej kompletne implementacje serwera WWW i puli wątków niż te, które zbudujemy. Jednak naszym zamiarem w tym rozdziale jest pomoc w nauce, a nie wybieranie łatwej drogi. Ponieważ Rust jest językiem programowania systemowego, możemy wybrać poziom abstrakcji, z którym chcemy pracować i zejść na niższy poziom, niż jest to możliwe lub praktyczne w innych językach.

Po drugie, nie będziemy tutaj używać async i await. Budowanie puli wątków to wystarczająco duże wyzwanie samo w sobie, bez dodawania budowania środowiska wykonawczego async! Jednakże, zauważymy, jak async i await mogą być stosowane do niektórych z tych samych problemów, które zobaczymy w tym rozdziale. Ostatecznie, jak zauważyliśmy w Rozdziale 17, wiele środowisk wykonawczych async używa pul wątków do zarządzania swoją pracą.

Dlatego napiszemy podstawowy serwer HTTP i pulę wątków ręcznie, abyś mógł poznać ogólne idee i techniki stojące za pakietami, których możesz użyć w przyszłości.