Server Web
Fa uns dies un company me va comentar que tenia com a projecte de programació d'aquest estiu programar un server web mitjanament decent, que servís pàgines webs amb html. Li vaig dir que me pareixia una bona idea, i que d'aqui unes setmanes m'hos hi podriem posar.
Me vaig anar informant, i vaig començar a lletgir es RFC 2616, i he fet un server de sockets TCP que escolta al port 80, lletgeix la pagina que demana el navegador (de l'HTTP Request) i envia un HTTP Response amb el codi de la pagina.
El codi font és a http://servomac.funpic.org/code/web_server.c, i està llicenciat sota GPL.
Ara per ara és una porqueria. Només accepta una petició HTTP, contesta i surt del bucle. El meu objectiu principal es que sigi capaç de servir pagines fins que el root acabi l'execució.
Per una altra banda, l'HTTP Response és molt pobre i s'hauria de millorar. A més, dona per suposat que la versió del protocol és la 1.1, i moltes altres coses que són 100% anti-robustesa. Com deia en Guillem als comentaris del tema anterior, he de donar gracies a que el navegador toleri tants d'errors :P.
Si teniu un moment, m'encantaria que mirasiu el codi i hem fesiu tots els comentaris posibles per a millorar el codi i el programa en general. S'agrairia molt, ja que això no és més que una versió alpha :D.
Salut!
ACTUALITZACIÓ : Acab d'afegir posibilitat de respondre a més d'una petició cada execució del programa, mitjançant un bucle infinit i procesos fills. He creat un CHANGELOG (que podeu trobar a "http://servomac.funpic.org/code/CHANGELOG.txt") on faig comptes anar publicant els canvis en el codi. La nova versió del server, amb concurrència, està publicada a "http://servomac.funpic.org/code/serverCon.c". Encara no tenc gens de maña amb el tema de jerarquia de procesos i tal, i no tenc ni idea de si estic fent una "xapusa". Ja em donareu la vostra opinió!
ACTUALITZACIÓ 2 : Ara ja mat els procesos zombies amb waitpid, perque no molestin a la taula de procesos.
Me vaig anar informant, i vaig començar a lletgir es RFC 2616, i he fet un server de sockets TCP que escolta al port 80, lletgeix la pagina que demana el navegador (de l'HTTP Request) i envia un HTTP Response amb el codi de la pagina.
El codi font és a http://servomac.funpic.org/code/web_server.c, i està llicenciat sota GPL.
Ara per ara és una porqueria. Només accepta una petició HTTP, contesta i surt del bucle. El meu objectiu principal es que sigi capaç de servir pagines fins que el root acabi l'execució.
Per una altra banda, l'HTTP Response és molt pobre i s'hauria de millorar. A més, dona per suposat que la versió del protocol és la 1.1, i moltes altres coses que són 100% anti-robustesa. Com deia en Guillem als comentaris del tema anterior, he de donar gracies a que el navegador toleri tants d'errors :P.
Si teniu un moment, m'encantaria que mirasiu el codi i hem fesiu tots els comentaris posibles per a millorar el codi i el programa en general. S'agrairia molt, ja que això no és més que una versió alpha :D.
Salut!
ACTUALITZACIÓ : Acab d'afegir posibilitat de respondre a més d'una petició cada execució del programa, mitjançant un bucle infinit i procesos fills. He creat un CHANGELOG (que podeu trobar a "http://servomac.funpic.org/code/CHANGELOG.txt") on faig comptes anar publicant els canvis en el codi. La nova versió del server, amb concurrència, està publicada a "http://servomac.funpic.org/code/serverCon.c". Encara no tenc gens de maña amb el tema de jerarquia de procesos i tal, i no tenc ni idea de si estic fent una "xapusa". Ja em donareu la vostra opinió!
ACTUALITZACIÓ 2 : Ara ja mat els procesos zombies amb waitpid, perque no molestin a la taula de procesos.
4 comentarios
servomac -
Si fer un procès fill per a cada petició és exagerat, te faré cas i me miraré el tema d'els threads. Ja que hi sóc, aprofit per demanar-te si saps d'algun bon paper, o un llibre que pugi trobar a la biblioteca de l'Anselm Turmeda :P, per lletgir una mica de teoria i tal, perque que jo tengi record domés he lletgit una vegada sobre threads, i era a un dels llibres d'en Tannembaum sobre SOs.
Ara per ara intentaré que la implementació del protocol HTTP sigi una mica més "sèria", i acceptar POSTs i demés en lloc de tan sols GETs :P.
Salut i gracies de nou!
guillem -
guillem -
Guti -
Va bien pensarlo al principio del desarrollo, al final tendrá que se multiproceso, por lo que mejor tenerlo en cuenta.