Le Coin Wiki
d'Olivier Dalle
$WikiTagline
 

Le but du projet cette anne est de concevoir un mini-serveur web.

Cahier des charge minimal

Le contrat minimum pour avoir la moyenne (1) est de fournir un code python original (2) qui implmente (3) la spcification suivante:

  • le port sur lequel le serveur coute est indiqu en paramtre du programme python
  • le programme python implmente le code qui permet de raliser les oprations suivantes l’aide des primitives vues en cours (4):
    • ouverture ou cration de deux fichiers de log dans le rpertoire courant: un fichier error.log pour les erreurs et un fichier success.log pour les requtes servies avec succs
    • attente d’une connection socket entrante sur le port reu en paramtre sur la ligne de commande
    • rception d’une requte
    • analyse de la requte: ok si GET, erreur autrement et vrifier prsence du fichier dsign par URL ou erreur autrement
    • gnration de messages de traces dans les fichiers de log adquat (error ou success)
    • prparation de l’en-tte de la rponse
    • si aucune erreur: ouverture du fichier design par URL
    • envoi du contenu du fichier vers le client
    • fermeture de la connection
    • retour l’attente d’une connection
    • Votre serveur se terminera proprement (5) par la reception d’un signal SIGINT ou SIGTERM

Remarques:
(1) 10/20 si le code tourne sans erreur, jusqu’ 12/20 si en plus c’est crit proprement et bien document
(2) c’est--dire un code crit par vous: tout code copi sur un voisin ou internet sera non recevable!
(3) ici implmente signifie que le code fonctionne et sans plantage intempestif.
(4) si vous avez envie un doute demandez votre enseignant: tout code utilisant des primitives non approuv sera rejet, mme s’il fonctionne parfaitement.
(5) criture d’un message dans les logs et fermeture des connections et fichiers de log.

Pour vrifier que votre code fonctionne: - vous crerez deux fichiers html, un court et un long (texte > 4Ko) - vous utiliserez votre navigateur favori en consultant l’url correspondant a chacun des deux fichiers l’adresse 127.0.0.1:xxxx ou xxxx est le port pass en paramtre

Pour gagner des points supplmentaires

Supplment 1

Ce supplment rapporte + 6 points, donc note maxi = 16 a 18 (si ralisation parfaite)

Vous proposerez une version parallle du serveur capable de traiter simultanment plusieurs requtes l’aide de plusieurs processus:

  • Option 1 (+2 point): en crant un nouveau processus fils chaque nouvelle connection (solution vue en cours). Attention, cotre solution doit viter de produire des zombies…
  • Option 2a (+4 points): en utilisant la technique du pre-fork: le pre cre plusieurs fils l’avance, et chaque fils se met en attente d’une requte de connection sur le socket de connection puis retourne se mettre en attente de connection. Lorsque le pre reoit un signal de terminaison, il doit le propoager ses fils et se terminer proprement sans laisser de zombies…
  • Option 2b (+6 points): en utilisant un fichier et des verrous, faire en sorte qu’ tout moment un seul processus seulement soit en train d’excuter l’attente sur accept (les autres attendent le verrou). Idem, viter les zombies lors de la terminsiason

Pour vrifier que votre code fonctionne: - vous ecrirez un petit script shell pour envoyer automatiquement de nombreuses requtes (p. ex 100) avec des commandes comme wget ou curl (envoi des rponses aux requetes dans /dev/null)

Supplment 2

Ce supplment rapporte jusqu’ +4 points, si la ralisation parfaite.

L’objectif est de supporter les requtes CGI (Common Gateway Interface). Un script CGI est un script dont l’execution produit sur sa sortie standard le code HTML qui devra tre renvoy au client. Il faut donc que le serveur cre un processus fils pour dclencher l’excution du script et faire suivre le rsultat au client. Mais attention, le serveur doit envoyer un en-tte avant d’envoyer le rsultat du script, et cet en-tte contient des informations a propos de l’excution du script…

La reconnaissance d’ventuels paramtres dans l’URL n’est pas demande.