Saltar la navegación

2.1.- Atender múltiples peticiones simultáneas.

Si observamos la siguiente figura, cuando un servidor recibe la conexión del cliente (accept) se crea el socket del cliente, se realiza el envío y recepción de datos y se cierra el socket del cliente finalizando la ejecución del servidor.

Como el objetivo es permitir que múltiples clientes utilicen el servidor de forma simultánea es necesario que la parte que atiende al cliente (zona coloreada de azul) se atienda de forma independiente para cada uno de los clientes.

Esquema de funcionamiento interno del modelo cliente/servidor en el que se muestran las diferentes módulos de funcionamiento y su interconexión.

Para ello, en vez de ejecutar todo el código del servidor de forma secuencial, vamos a tener un bucle while para que cada vez que se realice la conexión de un cliente se cree una hebra de ejecución (thread) que será la encargada de atender al cliente. De ésta forma, tendremos tantas hebras de ejecución como clientes se conecten a nuestro servidor de forma simultánea.

De forma resumida, el código necesario es:

   while(true){
             // Se conecta un cliente
Socket skCliente = skServidor.accept(); 
System.out.println("Cliente conectado");
// Atiendo al cliente mediante un thread
new Servidor(skCliente).start();
        }

Y a continuación puede ver su representación de forma gráfica:

Esquema de funcionamiento interno del modelo cliente/servidor concurrente en el que se muestran las diferentes módulos de funcionamiento y su interconexión.

Autoevaluación

Pregunta

¿Qué operaciones realiza el thread?

Respuestas

ServerSocket, Socket y accept.

ServerSocket y accept.

Accept y procesado de la información.

Procesado de la información.

Retroalimentación

Para saber más

Si deseas más información sobre el uso de threads y sockets en java puedes consultar la siguiente presentación:

Sockets y Threads en Java.