Primera versión medianamente funcional

Febrero 25, 2007 por tonipiza

Después de mucho tiempo sin actualizar (lo siento mucho, pero uso un repositorio darcs propio) acabado de hacer el cuarto commit, en el que añado muchas funcionalidades interesantes al servidor web. Pido perdón tanto a la organización como a la gente que se haya podido sentir interesada por el proyecto, pero este es mi primer año en la universidad y ando muy liado.

Una de las features de las que me siento más orgulloso consiste en que, cuando accedes a un directorio dónde no hay ningún fichero index.html, te genera una lista de los archivos contenidos en ese directorio (como hacen todos los servidores web :D ).

server.png

Por otro lado, he hecho algún benchmark usando el ab y el rendimiento de mi servidor era mayor al del Apache 1.3 (pero menor al 2.3 :D ). Es normal, porque tan solo llevo unas 500 linias de código y las funcionalidades del servidor són de risa al lado del Apache, pero poder decir que he escrito algo más rápido que el Apache me llena de orgullo y satisfacción !

Estoy intentando implementar un sistema de estadísticas, imitando la misma estructura básica que el Apache, para poder usar programas externos para analizar el tráfico.

Mis prioridades actuales són hacer funcionar correctamente el sistema de estadísticas, mejorar la seguridad y hacer que el servidor cumpla los estandares HTTP. Espero que alguien lo pruebe y me de su opinión ;)

Un hijo para cada petición!

Diciembre 18, 2006 por tonipiza

Perdonadme porque soy una verguenza de concursante; no le dedico el tiempo que debería ni al blog ni al servidor web. Intentaré poner remedio a esto durante estas navidades :)

Hoy os traigo una mejora importantísima para el server; hasta el momento, solo podiamos servir una página y el programa terminaba. Ahora he hecho un bucle infinito en el que se recibe una petición, se crea un proceso hijo para ella (man fork) y se “procesa” en la función construct_response.

Con esto se puede decir que el programa esta acabado. No os asusteis, esta porquería no será lo que entregue, pero ahora el trabajo simplemente es parsear adecuadamente la petición HTTP y construir una HTTP Response en consonancia.

Feliz navidad a todos!

HTTP, analizando el protocolo

Noviembre 13, 2006 por tonipiza

El protocolo HTTP esta muy bien documentado, y es muy complejo, aunque inicialmente yo intentaré evitar esta dificultad reduciendo el conjunto de instrucciones con las que trabajará el server, para obtener resultados e ir ampliando a posteriori el proyecto.

La idea es aceptar una HTTP Request sencilla, dando por supuesto que es una petición GET (porque en el HTTP 1.0 también tenemos POST y HEAD, pero eso lo dejamos para otro día) que sigue esta estructura :

GET /fichero.html HTTP/1.0

Una vez leido esto del socket, el server debe construir una HTTP Response adecuada para que el navegador pueda representar aquello que ha pedido. La HTTP Response tiene la siguiente forma :

HTTP/1.0 200 OK
Headers

Fichero pedido

Por supuesto, esto es una reducción brutal, puesto que de códigos de estado (200 OK en nuestro caso) encontramos más de 15 diferentes, dependiendo del estado del servidor y de la petición que haga el cliente, y las cabeceras también pueden llegar a ser muy complejas.

En definitiva, a lo que ibamos; el commit que acabo de hacer al svn de la forja ya responde de esta manera a una petición correcta :) !

Fuente : Especificaciones HTTP/1.0

Burocracia varia

Noviembre 8, 2006 por tonipiza

Después de estar un tiempo pendiente de que desde el centro de cálculo de mi universidad me asignaran una dirección de correo electronico, ya tengo el proyecto registrado en la forja de RedIris. Ahora me toca familiarizarme con el sistema, puesto que parece completísimo.

¡En breve os explicaré mis primeras ideas sobre como debería ser el servidor!

Ya tenemos sockets ;)

Noviembre 8, 2006 por tonipiza

Trás mi primera toma de contacto con svn, ya he colgado el primer fichero del proyecto. Simplemente es un código muy sencillo que abre el puerto 80, se pone a escuchar y imprime por pantalla lo que recibe.

El próximo paso es analizar la HTTP Request que nos envie el cliente, y construir y enviar la HTTP Response correspondiente.

Empieza la aventura

Octubre 20, 2006 por tonipiza

¡Buenas compañeros!

En primer lugar, me gustaría presentarme a mi y a mi proyecto. Soy un estudiante de 1º de Ingeniería de Sistemas en la UIB, y mi proyecto es algo muy ambicioso para mis limitados conocimientos; escribir un servidor web en C.

Muchos os preguntareis, ¿porqué un server web cuando en el mundo del software libre ya tenemos montones de opciones realmente robustas, extendidas, y de calidad? Pues la respuesta es bien sencilla; este proyecto no nace con el objetivo de convertirse en un servidor web con grandes cuotas de mercado, ni mucho menos. Mi intención es aprender los entresijos de C, de la programación de sockets, del protocolo HTTP, así como saber que es eso de enfrentarse a un proyecto medianamente serio.

Por supuesto, todo el proyecto estará bajo licencia GPL, y cuando termine el concurso tengo intención de abrir su desarrollo para que se pueda unir todo el que quiera. Es la magia del software libre y la filosofía hacker, el trabajo en equipo, compartiendo conocimiento y creando más y mejor código.

Espero poder dedicarle bastante tiempo al proyecto, pero deberé compaginarlo con el primer curso de la carrera, y esto nunca es facil. Tampoco quiero relegar el ámbito académico a un segundo plano por el proyecto, ni mucho menos, así que intentaré encontrar el equilibrio adecuado.

En último lugar, me gustaría agradecer a la gente del Concurso Universitario de Software Libre la gran oportunidad que nos ofrecen, a mi y a todos a los que le han aceptado los proyectos, así como el gran impulso que dan al software libre en España con iniciativas de este calibre.