Hello !
Dans un projet, on a un serveur web a faire en C.
Il nous a proprosé une architecture qui, selon lui, est bcp + robuste que celle proposée par défaut, a savoir un process maitre qui foirke des qu'un client arrive.
Son truc a lui c'est :
-Processus qui forke n fois, et tous les threads sont donc en attente.
-Trois etats différents : Eteint, en attente, en cours de traitement
-Le processus maitre se met en attente d'une connexion.
-Le processus en attente, le seul, envoie un signal a son thread "voisin", signifiant "Mets toi en attente".
-Si le thread voisin se mets en attente car il était dans le mode éteint, alors il envoie a son voisin, comme une liste chainée , un signal disant "J'ai pris le relais, fait ton execution".
-Si le thread voisin pouvait pas, il relaie au prochain thread la demande d'attente
-Si la demande d'attente a fait une boucle et revient au process maitre, alors il fait un Denial of service.
-Si le signal que quelqu'un arrive au maitre, alors il traite la demande.
Point fort :
-Si serveur lancé alors les ressources sont la
-attaques de type "pleins de clients" pas possible
-Les forks planteront jamais si le serveur est lancé ( y en aura pas de fait en live en fait, sauf pour les cgi).
La faiblesse :
-Chaque signal va devoir se balader sur chacun des X threads avant de revenir a son maitre, dans les deux cas.
Y a moyen d 'avoir un truc plus efficace que cela a votre avis ?
Par exemple en incluant *jenesaispascomment* le PID du process maitre en cas d'acceptation... un truc du genre...
Vos idées sont les bienvenues. Le but du TP est pas de forcément discuter son truc, c'est moi, personellement, qui m'intérroge a mort.