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

Progetto Finale: Costruire un Server Web Multi-Thread

È stato un lungo viaggio, ma siamo arrivati alla fine del libro. In questo capitolo, realizzeremo insieme un ultimo progetto per dimostrare alcuni dei concetti trattati negli ultimi capitoli, oltre a ripassare alcune lezioni precedenti.

Per il nostro progetto finale, realizzeremo un server web che dice “Ciao!” e appare come nella Figura 21-1 in un browser web.

Ecco il nostro piano per la costruzione del server web:

  1. Imparare un po’ su TCP e HTTP.
  2. Ascoltare le connessioni TCP su un socket.
  3. Analizzare un numero limitato di richieste HTTP.
  4. Creare una risposta HTTP appropriata.
  5. Migliorare le prestazioni del server implementando un pool di thread.

Screenshot
di un browser web che visita l’indirizzo 127.0.0.1:7878 e visualizza una pagina
web con il contenuto testuale “Ciao! Un saluto da Rust”

Figura 21-1: Il nostro progetto finale condiviso

Prima di iniziare, dovremmo menzionare due dettagli. Primo, il metodo che useremo non sarà il modo migliore per costruire un server web con Rust. I membri della community hanno pubblicato un numero di crate pronti per la produzione disponibili su crates.io che forniscono implementazioni più complete di server web e pool di thread rispetto a quelle che costruiremo. Tuttavia, la nostra intenzione in questo capitolo è aiutarti a imparare, non prendere la strada facile. Poiché Rust è un linguaggio di programmazione di sistema, possiamo scegliere il livello di astrazione con cui lavorare e possiamo scendere a un livello inferiore rispetto a quanto sia possibile o pratico in altri linguaggi.

Secondo, non useremo async e await qui. Costruire un pool di thread è già una sfida abbastanza grande da sola, senza aggiungere la costruzione di un runtime async! Tuttavia, noteremo come async e await potrebbero essere applicabili ad alcuni dei stessi problemi che vedremo in questo capitolo. In definitiva, come abbiamo notato nel Capitolo 17, molti runtime async usano pool di thread per gestire il loro lavoro.

Scriveremo quindi il server HTTP di base e il pool di thread manualmente in modo che tu possa imparare le idee e le tecniche generali dietro i crate che potresti usare in futuro.