Journal un micro serveur http 1.0 pour la maison

Posté par  (site web personnel) .
Étiquettes : aucune
0
5
déc.
2005
C'est en remarquant la montée de la popularité d'un serveur web libre sympathique de chez acme.com (thttpd utilisé par quelques FAI américains et français, dont club-internet, je crois) que je me suis égaré sur une page citant des serveurs web pour le moins exotiques : un en Javascript avec un interpreteur Js-cli, un autre en shell (bon ça tout le monde l'a fait ok), et un en Postscript (là il faut aimer). Bref, aucun ne peut ouvrir une socket, évidemment, et se base donc sur inetd.
Et puis il y a micro_httpd, écrit en C, basé aussi sur inetd.
Je l'ai modifié hier pour le booster en lui retirant un sale appel à system(), puis je l'ai installé sur mon portable. il supporte allègrement les 2 ou 3 requêtes par seconde en pointe lorsque toute la famille veut accéder à mon portable (ce qui n'arrive pour ainsi dire jamais).

Bref, micro_httpd est idéal pour l'apprentissage, et pour le fun,
à lire et à customizer (couleurs, 404, page d'index et que sais-je encore..) pour le plaisir de faire joujou.

la version originale:
http://www.acme.com/software/micro_httpd/

le patch (vite-fait) pour virer l'appel à system():
http://brouits.free.fr/share/patches/micro_httpd-nosed.diff


--
petite précision :
Vu que je suis naté, sur 192.168.0.0, il m'a fallu modifier la config de tous les navigateurs des autres PC pour leur interdire d'utiliser le proxy du FAI pour aller sur ce portable. (il m'a fallu un certain temps avant de comprendre pourquoi diantre cela ne fonctionnait pas au début)
  • # Commentaire supprimé

    Posté par  . Évalué à 3.

    Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # scandir()

      Posté par  (site web personnel) . Évalué à 3.

      bah, je pense que le gars a codé ça à l'arrache en moins d'une heure et qu'il n'avait pas en tête la fonction scandir(), et/ou qu'il voulait économiser 5 ou 6 lignes de code en plus, voir qu'il ne la connaissait pas, vu qu'elle n'est pas posix mais bsd. Justement, je l'ai découverte de man en man alors que j'allais remplir un classique "dirent *" avec l'artillerie posix opendir/readdir/seekdir/closedir.

      Tout homme qui dirige, qui fait quelque chose, a contre lui ceux qui voudraient faire la même chose, ceux qui font précisément le contraire, et surtout la grande armée des gens d'autant plus sévères qu'ils ne font rien du tout. -- Jules Claretie

  • # En PHP :)

    Posté par  . Évalué à 3.

    Je me suis amusé aussi à faire un petit serveur HTTP en PHP.
    Il supporte une partie du protocol 1.1 (Keep-Alive, etc...) , il fait proxy, et est à peu près modulable. Comme PHP5 peut ouvrir une socket de type serveur, il fonctionne en standalone.
    C'est environ 2 fois plus lent que Apache 1 sur des fichiers statiques, mais la performance n'était pas le but non plus (enfin il y a moyen d'améliorer je pense).
    J'ai fait une "abstract class" de gestion de serveur multiprocessus dont je me sert pour ce serveur. Je me suis inspiré de Apache pour la configuration (MaxClients, Max|MinSpareServers, etc...).

    C'est assez amusant à faire, pour la gestion des processus, le protocol HTTP, etc...
    Je suis en déménagement en ce moment, donc pas de site ni de démo, mais je peu envoyer un petit tgz si quelqu'un est intéressé.
    Il y a encore des trucs à faire, genre un module CGI, ou encore le support SSL.
    • [^] # Re: En PHP :)

      Posté par  . Évalué à 3.

      C'est vrai qu'on peut faire des serveurs très sympa en php. Je me suis moi-même essayé à l'écriture d'un serveur IRC dans ce langage, c'est un exercice très formateur. (Pour info, les sockets serveur marchent très bien aussi en php4).

      Pour revenir sur le sujet des serveurs http en php, il y a aussi nanoweb (qui est connu et assez mature) :

      une vieille news dlfp : http://linuxfr.org/2002/10/29/10142.html
      le site : http://nanoweb.si.kz/
  • # lighttpd

    Posté par  . Évalué à 3.

    A noter l'existence de lighttpd : http://lighttpd.net/

    Il est à la fois très léger, rapide (plus qu'apache notamment sur les fichiers statiques) et il supporte des fonctionnalités avancées (fastcgi...). Enfin, il est très simple à configurer.

    L'essayer c'est l'adopter.
    • [^] # Re: lighttpd

      Posté par  . Évalué à 2.

      En ce qui concerne les très petits serveurs, j'avais utilisé fnord sur un 386 :
      http://www.fefe.de/fnord/

      C'est vraiment très petit, et c'est très rapide.
  • # IOCCC

    Posté par  . Évalué à 1.

    Dans les gagnants de l'IOCCC, il y a quelqu'un qui a fait un serveur HTTP ultra light (supporte en partie CGI, mais pas entièrement et c'est tout... Mais en quelques centaines de lignes de code seulement :o))

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.