Open unkn0wn107 opened 6 months ago
petit aperçu d'une archi possible. Vous en pensez quoi ?
Super premier jet !
Classe Config aussi, résultat du ConfigLoader.
Je mettrais aussi un Router et des Route, utilisées par ConnectionHandler, qui dispatche à FileManager (que je mettrais pas au serveur mais à ConnectionHandler) ou à CGIHandler selon la Route et la Config (ConnectionHandler l'utiliserait aussi).
Le logger serait utilisé par quasiment toutes les classes pour centraliser le logging, pas que server.
Pour encore plus découper les responsabilités de HTTPProtocol, je vois bien aussi ces classes dans le game : Request : méthodes pour la parser et accéder aux en-têtes, au corps, etc. Response : méthodes pour définir les en-têtes, le corps, etc.
Utilisations / Relations :
J'ajouterais aussi un CacheHandler (Cache tout simplement) pour gérer le cache des Response en fonction des Request. Ils parlent pas de Cache dans le sujet mais c'est ce qui fait qu'un serveur web peut rep à pleins de requêtes concurrentes. Ca me parait pas bien complexe : un map de key/value intérrogé à chaque Request qui retourne une Response si la requête exacte a déjà été faite. A voir si on veut implémenter ça ?
J'y mettrais aussi une classe abstraite Middleware pour pouvoir charger des middlewares et ajouter des traitements intermédiaires facilement. Question à se poser si on a des traitements à faire du genre en mandatory ou bonus ?
J'ajouterais bien un ThreadPool pour gérer le multi-threading aussi :
class ThreadPool {
public:
ThreadPool(size_t poolSize);
enqueue(Task &task);
private:
void routine();
Task[ ] tasks;
pid_t[ ] workers;
size_t poolSize;
};
L'intérêt est certains, à voir la complexité que ça amènerait et si on fait ce choix ou pas ?
Je vous propose d'utiliser la notation Mermaid pour le diagramme de classe. Facile à apprendre et écrire, couramment utilisé et nativement intégré à Github.
Y'a un live editor ici
Classes Principales
1. Server
ConnectionHandler
pour gérer les connexions individuelles.2. ConnectionHandler
HTTPProtocol
pour analyser et répondre aux requêtes.HTTPProtocol
pour déléguer le traitement des requêtes HTTP.3. HTTPProtocol (classe abstraite)
HTTP1_1
,HTTP2
4. HTTP1_1
HTTPProtocol
pour HTTP/1.1.5. HTTP2
HTTPProtocol
pour HTTP/2 (facultatif, pour extension future).6. ConfigLoader
7. FileManager
8. Logger
Classes pour les Fonctionnalités Bonus
9. SessionManager
10. CookieManager
11. CGIHandler
Interactions et Relations