Reto vinculado con el protocolo HTTP:
Acceso paralelo a múltiples recursos web de un servidor

Valoración

Trabajo individual, de carácter voluntario, que puede otorgar una nota de hasta 0,75 puntos, que se añadirían a la nota total de la asignatura sólo en caso de que ésta esté aprobada.

Plazo

Hasta el final del martes 26 de febrero.

Enunciado

Tal como se explica en la parte teórica de la asignatura, gracias al uso de conexiones persistentes y al pipeline de peticiones, la versión 1.1 del protocolo HTTP permite mejorar el rendimiento a la hora de solicitar múltiples objetos de un mismo servidor al reducir la sobrecarga de conexiones, disminuir las latencias acumuladas y habilitar un modo de operación paralelo en el servidor.

En la versión 1.0 del protocolo, la única manera de obtener paralelismo en al acceso a múltiples recursos del mismo servidor era establecer múltiples conexiones con el servidor, aunque este paralelismo siempre quedaba limitado por el número máximo de conexiones simultáneas que admitía el servidor.

Este ejercicio práctico se plantea sobre la idea de mezclar ambas técnicas: desarrollar un cliente que establezca un cierto número de conexiones con un servidor, de manera que por cada una de ellas solicite usando pipeline de peticiones un subconjunto proporcional de los objetos requeridos.

El programa a desarrollar recibirá como argumentos el nombre del servidor, el número de conexiones a realizar y el conjunto de objetos que hay que solicitar a dicho servidor:

	mwget servidor n_conexiones objeto1 objeto2...

El programa traerá las URLs correspondientes a http://servidor/objeto1, http://servidor/objeto2, etc., almacenándolas localmente en ficheros con el mismo nombre (si el objeto incluye un directorio, el fichero local se correspondería con el basename del objeto).

El programa debe repartir proporcionalmente las peticiones de los objetos entre las conexiones especificadas. Así, si hay N objetos y C conexiones, los N/C primeros objetos de pedirán por la primera conexión, los siguientes por la segunda y así sucesivamente. A la hora de redondear ese cálculo, se plantea la siguiente fórmula para cada conexión i (suponiendo que están numeradas de 1 a C):

nº objetos pedidos por conexión i = N/C + (((N%C) >= i)? 1 : 0);

Se recomienda primero desarrollar una versión con una sola conexión para centrarse en el problema del pipeline de peticiones y luego incorporar la lógica de manejar múltiples peticiones.

NOTA IMPORTANTE: si el cliente no usa un pipeline a la hora de realizar las peticiones, la práctica será considerada como errónea.

Puede usar la tecnología de programación que considere oportuna pero el programa debe ejecutar correctamente en triqui sin necesidad de hacer ninguna instalación de software. Por poner tres ejemplos en cuanto a qué tecnología de desarrollo usar, se podría programar esta funcionalidad directamente en C usando sockets, lo que podría ser bastante laborioso, o usar un shell script que incluya mandatos como nc, curl o wget para acceder a los recursos web solicitados, o programar la funcionalidad directamente en Java.

Entrega

La entrega de la práctica sólo se puede hacer en triqui. Para ello, se debe crear, en primer lugar, la siguiente jerarquía de directorios en el HOME de la cuenta de triqui:
	mkdir -p DATSI/SD/RETO1.2012b
En ese directorio debe incluir un fichero denominado reto1.zip, donde incluirá el código desarrollado, así como cualquier otro fichero que considere oportuno.

A continuación, debe entregar la práctica ejecutando:

	entrega.sd reto1.2012b
NOTA: A diferencia de los proyectos prácticos de la asignatura, este trabajo voluntario no dispone de un corrector automático para su evaluación.