Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Derniers journaux de brouits :

Journal : un micro serveur http 1.0 pour la maison

Posté par Ben (Jabber id, page perso, ) le 05 décembre 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)

> Lire le journal (7 commentaires, moyenne: 2,6).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

Un micro serveur http 1.0 pour la maison

Posté par L (page perso, ) le 05/12/2005 à 08:14. (lien). Évalué à 3.

C'est vrai que quand on regarde le code original qui génère la page d'index, utiliser une liste de commande shell avec une expression sed aussi longue sur la sortie de ls, on peut se demande ce qui est passé par la tête de l'auteur à ce moment : il lui aurait été sûrement plus rapide de faire une fonction dir_output() comme tu as fait que de rédiger son expression sed à rallonge :) D'autant que ta solution évite la création de moute processus et l'utilisation de multiple descripteur de fichier pour finalement un but simple !

  • [^]scandir()

    Posté par Ben (Jabber id, page perso, ) le 05/12/2005 à 10:06. (lien). É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.

En PHP :)

Posté par andeus () le 05/12/2005 à 10:48. (lien). É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 Cali_Mero () le 05/12/2005 à 12:12. (lien). É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/

    --
    #define MAGIC 0xdefaced /* I should've patented this number -cliph */

lighttpd

Posté par The Fab (page perso, ) le 05/12/2005 à 17:15. (lien). É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 Khanh-Dang (page perso, ) le 06/12/2005 à 19:37. (lien). É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 Moonz () le 05/12/2005 à 19:14. (lien). É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))

Revenir en haut de page