Cette application web a été réalisée avec les technologies suivantes : Next.js, React, TypeScript, Node.js, Tailwind CSS, Prisma ORM, PostgreSQL...

En savoir plus

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

image
image
Chargement des données
Chargement des données
Chargement des données

Vous souhaitez découvrir le code de ce projet et le tester par vous-même ?

Projets similaires

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.

Prenons rendez-vous

Vous souhaitez découvrir d’autres projets ?