Objetivos: En esta tarea usted aplicará: Uso de hilos, manejo de zonas de acceso exclusivo, comunicación TCP y pruebas de escalabilidad.
Introducción:
La televisión digital que está emergiendo en muchos países del
mundo viene acompañada de interactividad. La interactividad en los
nuevos receptores de televisión es lograda a través de aplicaciones
incrustadas en y difundidas junto al flujo digital que trae el vídeo
y
audio del canal sintonizado. Estas aplicaciones son descargadas en
memoria del televisor y son ejecutas parar permitir la interacción
con el usuario "televidente". Esta interacción puede ser local o
remota. Cuando la interacción es local, el usuario interactúa con la
aplicación que corre en el televisor o set-top-box usando su control
remoto. Podemos verla en forma similar a una aplicación corriendo en un
computador pequeño no conectado a
Internet. Un ejemplo de estas
aplicaciones es el juego de cartas "solitario" o una aplicación que
muestre el pronóstico del tiempo. Usuarios con servicio
de Internet, al conectar sus televisores a Internet podrán correr
aplicaciones con interacción remota. Con este tipo de aplicaciones los
"televidentes" podrán, por ejemplo, correr aplicaciones para votar por
el cantante que mejor interpretó una canción, el artista con mejor
show cómico, o decidir el rumbo que tomará la historia en desarrollo.
Por ejemplo el televidente podría expresar su
intención de voto por un candidato a alcalde en el contexto de un
debate político en
vivo.
Esta respuesta puede ser acumulada en un servidor central y en tiempo
real ser
conocida por los televidentes del programa. Este es el contexto de la
tarea que usted deberá desarrollar.
Problema: En aplicaciones con algún tipo de votación sincrónica de
tiempo real, es decir la respuesta se requiere dentro de un tiempo, las
aplicaciones interactivas generarán en forma sincrónica una gran
demanda del servidor que acumula las respuestas. Exploraremos la
capacidad de atención de consultas simultáneas provenientes de muchos
clientes. Se pide así que usted desarrolle un servidor concurrente que
acepte conexiones de "televisores", los cuales sólo enviarán un paquete con un número
entero que representará el número de la opción seleccionada. El
servidor irá acumulando la estadísticas de respuestas; es decir el
número de preferencias de cada opción. Además de recibir las opciones
de los usuarios (televidentes), el servidor enviará la estadística acumulada cada vez
que un cliente monitor se conecte a un puerto específico.
Programas a desarrollar:
$ acumulador <puerto_votación> <puerto_monitor>
$ televisor <servidor_acumulador> <puerto_votación> <opción_seleccionada>
$ monitor <servidor_acumulador> <puerto_monitor>
$ testEsfuerzo <servidor_acumulador> <puerto_votación> <número_clientes_simulados>
acumulador es el servidor concurrente que acumula el número de
preferencias por cada opción. Considere que la opción sólo puede adoptar un
valor entre 0 y 5 inclusive. acumulador recibe conexiones de clientes
(televisores) en puerto <puerto_votación>. Por esta conexión lee
un número entero (que debe estar en el rango 0..5 y luego cierra la
conexión. Por otro lado para cada cliente que se conecta al puerto
<puerto_monitor> reporta una línea de texto con 6 enteros separados por
espacios, para referirse al número de preferencias de cada opción, y
cierra la conexión.
televisor sólo establece una conexión TCP con el acumulador ubicado en
<servidor_acumulador> <puerto_votación> y envía un string
que sólo contiene un número entero <opción _seleccionada> en el rango 0 a 5 inclusive. Luego cierra la conexión.
monitor permite consultar por el valor acumulado de las preferencias
por cada opción. Una vez recibida la respuesta, éste muestra la estadística
en la salida estándar y termina.
Finalmente testEsfuerzo es un programa que genera
<número_clientes_simulados> de hebras. Cada hebra
inicia una conexión con el servidor <servidor_acumulador> puerto
<puerto_votación>, envía un número aleatorio entre 0..5, cierra
la conexión y termina la hebra. TestEsfuerzo termina cuando todas las
hebras han terminado.