Professional Documents
Culture Documents
Un Servidor Concurrente
Un servidor concurrente atiende a varios clientes al mismo
tiempo.
Ms an, mientras est atendiendo sigue escuchando
El problema es que todo cliente tiene que esperar su turno para
ser atendido
Si uno de ellos pide un archivo muy grande los dems tienen
que esperar
La mayor parte de la espera es debido a operaciones de IO, hay
capacidad de CPU ociosa !
Se trata de crear un nuevo proceso o lnea de ejecucin cada vez
que un cliente llega a pedir un servicio.
Algoritmo de Servidor
Concurrente
Programa principal o master del servidor
1- Crear un Socket de servidor
En un ciclo infinito:
2- aceptar requerimientos de clientes
3- cuando llega una peticin de un cliente crear un nuevo
proceso esclavo que atienda paralelamente la peticin
(esto no debe bloquear la ejecucin del programa master
del servidor)
4 - volver a 2.
Proceso esclavo
1- Recibir los parmetros de la comunicacin (socket o flujos de entrada
y/o salida)
2- Atender al cliente (ej: leer el nombre del archivo, transmitir el archivo)
3- Retornar (desaparecer !)
while(1) {
ssock = accept(msock, &fsin, &alen);
pid = fork();
if (pid == 0) {
atender al cliente;
retornar;
}
Implementacin de Threads
Una forma de usar Threads en Java es creando una nueva clase
que extienda la clase Thread y sobreescribir el mtodo run.
Los threads son una clase existente. Esta clase se debe extender para
hacer una clase derivada que haga lo que nosotros queramos.
Lo que un thread en particular hace cuando se echa a correr se programa
en un mtodo llamado run de la clase extendida de Thread..
El mtodo run ejecuta cuando a un objeto de esta clase se le aplica el
mtodo start()
MultiFileServer MultiFileThread
Bla bla
Talk client
Talk Server
Bla bla
Talk Server
Talk Server
Talk client
Bla bla