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.
mkdir -p DATSI/SD/RETO1.2012bEn 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.2012bNOTA: A diferencia de los proyectos prácticos de la asignatura, este trabajo voluntario no dispone de un corrector automático para su evaluación.