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:
- Naucz się trochę o TCP i HTTP.
- Nasłuchuj połączeń TCP na gnieździe.
- Parsuj niewielką liczbę żądań HTTP.
- Utwórz poprawną odpowiedź HTTP.
- Popraw przepustowość naszego serwera za pomocą puli wątków.
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.