Projet final : construire un serveur web multitâche
Ce fut un long voyage, mais nous avons atteint la fin du livre. Dans ce chapitre, nous allons construire un dernier projet ensemble pour illustrer certains des concepts que nous avons abordés dans les derniers chapitres, ainsi que pour récapituler certaines leçons précédentes.
Pour notre projet final, nous allons créer un serveur web qui affiche “Hello!” et ressemble à la Figure 21-1 dans un navigateur web.
Voici notre plan pour construire le serveur web :
- Apprendre un peu sur TCP et HTTP.
- Écouter les connexions TCP sur un socket.
- Analyser un petit nombre de requêtes HTTP.
- Créer une réponse HTTP correcte.
- Améliorer le débit de notre serveur avec un groupe de threads (thread pool).
Figure 21-1 : Notre dernier projet partagé
Avant de commencer, nous devons mentionner deux détails. Premièrement, la méthode que nous utiliserons ne sera pas la meilleure façon de construire un serveur web avec Rust. Des membres de la communauté ont publié un certain nombre de crates prêtes pour la production, disponibles sur crates.io, qui fournissent des implémentations de serveur web et de groupe de threads plus complètes que ce que nous allons construire. Cependant, notre intention dans ce chapitre est de vous aider à apprendre, pas de prendre le chemin le plus facile. Comme Rust est un langage de programmation système, nous pouvons choisir le niveau d’abstraction avec lequel nous voulons travailler et descendre à un niveau plus bas que ce qui est possible ou pratique dans d’autres langages.
Deuxièmement, nous n’utiliserons pas async et await ici. Construire un groupe de threads est déjà un défi suffisamment important en soi, sans y ajouter la construction d’un runtime async ! Cependant, nous noterons comment async et await pourraient s’appliquer à certains des mêmes problèmes que nous verrons dans ce chapitre. En fin de compte, comme nous l’avons noté au chapitre 17, de nombreux runtimes async utilisent des groupes de threads pour gérer leur travail.
Nous allons donc écrire le serveur HTTP basique et le groupe de threads manuellement afin que vous puissiez apprendre les idées générales et les techniques derrière les crates que vous pourriez utiliser à l’avenir.