webserv
L'objectif de ce projet est de créer son propre serveur HTTP. Ce dernier doit être inspiré de Nginx et fonctionner sur un navigateur web.
Présentation du projet
Webserv est le seul projet en C++ du tronc commun à l'École 42 (bien qu'il soit précédé de modules en CPP).
L'objectif est de créer un serveur HTTP en C++ 98, fortement inspiré du serveur web open source Nginx.
Il y a donc tout un aspect configuration à prendre en compte incluant la possibilité de :
-
créer plusieurs directives de serveur,
-
créer plusieurs directives de location au sein de chaque directive de serveur,
-
gérer différents modifiers pour chaque directive de location ("/" et "=" par exemple),
-
définir le port d'écoute (8080 par défaut),
-
définir un hostname.
Cette liste est non exhaustive.
Organisation du groupe et répartition des tâches
Webserv est un projet de groupe composé de 2 ou 3 personnes.
Nous avons choisi de le faire à 3 et de découper le projet selon les parties suivantes :
-
Parsing du fichier de configuration, afin de vérifier sa validité et transmettre les informations au serveur
-
Gestion du serveur, des sockets et du polling
-
Gestion du Common Gateway Interface (CGI) afin de pouvoir uploader, afficher et supprimer des fichiers sur le serveur
Mon rôle dans ce projet
Au sein de ce groupe, j'ai travaillé sur la partie serveur.
La principale contrainte technique de ce projet est de créer un serveur qui soit NON bloquant.
Cela signifie qu'il doit :
-
ne jamais s'arrêter de tourner,
-
être toujours à l'écoute de nouvelles connections client entrantes,
-
toujours répondre aux requêtes client.
Pour cela, il est nécessaire d'utiliser l'I/O multiplexing (ou "multiplexage" en français), une technique de programmation concurrente.
Grâce à l'appel système epoll(), cela permet d'écouter plusieurs sockets (à savoir des connections client) en même temps.
Pour plus d'informations techniques à ce sujet, vous pouvez consulter mon repository sur GitHub (le lien est disponible plus bas dans la page).
Parce qu'une image vaut mille mots


Vous souhaitez découvrir le code de ce projet et le tester par vous-même ?
Projets similaires
ft_transcendence
Ce projet est centré sur la conception, le développement et l'organisation d'une application web...
Inception
Ce projet vise à élargir ses connaissances en administration système grâce à Docker. Cela nécessite...
CPP Module 09
Ce module est conçu pour comprendre les conteneurs en C++.
CPP Module 08
Ce module est conçu pour comprendre les conteneurs modélisés, les itérateurs et les algorithmes en...
CPP Module 07
Ce module est conçu pour comprendre les modèles en C++.
CPP Module 06
Ce module est conçu pour comprendre les différents types de casting en C++.
CPP Module 05
Ce module est conçu pour comprendre le try/catch et les exceptions en C++.
CPP Module 04
Ce module est conçu pour comprendre le polymorphisme par sous-typage, les classes abstraites et les...
CPP Module 03
Ce module est conçu pour comprendre l'héritage en C++.
CPP Module 02
Ce module est conçu pour comprendre le polymorphisme ad hoc, la surcharge de fonction et les...
CPP Module 01
Ce module est conçu pour comprendre l'allocation de mémoire, les références, les pointeurs sur...
CPP Module 00
Ce premier module de C++ est conçu pour comprendre les spécificités de ce langage par rapport au...
Ce projet vous semble similaire au vôtre ?
Si vous pensez que les compétences développées grâce à ce projet pourraient être utiles au vôtre, vous pouvez me contacter grâce au bouton ci-dessous.