1213 sockets [4] servidors i fils

30
SÒCOLS 4 Servidors i fils

Upload: oriol-torres

Post on 01-Jul-2015

60 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 1213 Sockets [4] Servidors i fils

SÒCOLS

4 Servidors i fils

Page 2: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors iteratius

① Escolta una petició d’un client.

② Processa la petició del client.

③ Respon al client.

④ Torna a bloquejar-se a l’espera d’una nova petició.

⑤ Mentre es processa la petició del 1r client, poden arribar

noves peticions que hauran de quedar a l’espera.

Servidor

En el sistema solament existirà 1 petició com a

màxim que s’estigui resolent.

Aquesta solució solament s’utilitza quan la petició del

client es pot gestionar en un temps molt petit.

Page 3: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors iteratius

Crida bloquejant

Bucle infinit

Inici del servidor

Crear ServerSocket

socket = serverSocket.accept()

Processar missatge

Llegir missatge del socket

Enviar resposta pel socket

Page 4: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors iteratius: Desavantatges

El problema és que tot client ha d’esperar el seu

torn per ser atès.

Si un d’ells demana un arxiu molt gran, la resta

haurà d’esperar.

La major part d’espera és degut a les operacions

I/O, hi ha capacitat de CPU desaprofitada.

Page 5: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors multicast (Broadcasting)

El multicast és un mètode d’adreçament IP. Una

adreça multicast està associada amb un grup de

receptors interessats.

D’acord amb el RFC 3171, les adreces IP des de

la 224.0.0.0 a les 239.255.255.255 estan

adreçades per ser adreces de multicast.

Page 6: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors multicast (Broadcasting)

Aquest rang s’anomena, formalment, “classe D”.

L’emissor envia un únic datagrama (des de

l’adreça unicast de l’emissor) a l’adreça multicast

i l’encaminador s’encarregarà de fer còpies i

enviar-les a tots els receptors que hagin informat

del seu interès per les dades d’aquest emissor.

Page 7: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors multicast: El servidor

// Crearem el MulticastSocket sense especificar el port

MulticastSocket s = new MulticastSocket ();

// Crearem el grup multicast:

InetAddress group = InetAddress.getByName (“231.0.0.1”);

// Crearem un datagrama buit en principi:

byte [] buit = new byte [0];

// Crear el Datagrama (missatge, grandària miss, grup Multicast i port):

DatagramPacket dgp = new DatagramPacket (buit, 0, group, 100000);

// Enviem el paquet

s.send (dgp);

//Tanquem el socket

s.close ();

Page 8: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors multicast: El client

// Crearem un socket multicast en el port 10000

MulticastSocket s = new MulticastSocket (10000);

// Configurarem el grup (IP) al que ens connectarem:

InetAddress group = InetAddress.getByName (“231.0.0.1”);

// Ens unim al grup:

s.joinGroup (group);

// Rebem el paquet del socket:

DatagramPacket dgp = new DatagramPacket (buffer, buffer.length);

s.receive (dgp);

// Sortim del grup multicast

s.leaveGroup (group);

//Tanquem el socket

s.close ();

Page 9: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors multicast: Servidor (1)

Tot el que escrivim per teclat des del servidor multicast serà

rebut pels clients.

Page 10: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors multicast: Servidor (2)

Tot el que escrivim per teclat des del servidor multicast serà

rebut pels clients.

Page 11: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors multicast: Client (1)

El client estarà subscrit a l’adreça multicast en el port específic per

rebre tot el que emeti el servidor. sempre estarà escoltant al servidor

multicast

Page 12: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors multicast: Client (2)

El client estarà subscrit a l’adreça multicast en el port específic per

rebre tot el que emeti el servidor. sempre estarà escoltant al servidor

multicast

Page 13: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors concurrents

① Escolta una petició d’un client.

② Quan li arriba una petició del client, comença un nou procés

per gestionar aquesta consulta.

③ El nou servidor gestiona la totalitat de la consulta.

④ Quan s’ha processat completament, aquest nou procés

finalitza.

⑤ Es torna al primer punt.

Servidor

El servidor executa un nou procés per gestionar cada consulta.

Cada client té el seu “propi” servidor.

Page 14: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors concurrents

Page 15: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors concurrents

SERVIDOR

CLIENT

CLIENT

CLIENT

4444

Hi ha processos separats per atendre el port i

per transferir la resposta i/o el resultat de la

petició

Page 16: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors concurrents

SERVIDOR

CLIENT

4444

Hi ha processos separats per atendre el port i

per transferir la resposta i/o el resultat de la

petició

Page 17: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors concurrents

Després de que el client contacti amb el servidor, aquest

crea un altre procés per atendre al client i quedar-se

escoltant el port 4444 a l’espera d’un nou client

SERVIDOR CLIENT

CLIENT 4444

Page 18: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors concurrents

Després de que el client contacti amb el servidor, aquest

crea un altre procés per atendre al client i quedar-se

escoltant el port 4444 a l’espera d’un nou client

SERVIDOR CLIENT

CLIENT 4444

Page 19: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors concurrents

El servidor crea un altre procés i es queda escoltant el

port 4444 a l’espera d’un nou client

SERVIDOR CLIENT

CLIENT 4444

Page 20: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors concurrents

Un tercer client contacta amb el servidor..

SERVIDOR CLIENT

CLIENT

CLIENT

4444

Page 21: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors concurrents

Es crea un tercer procés esclau (un nou fil)..

SERVIDOR CLIENT

CLIENT

CLIENT

4444

Page 22: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors concurrents: La classe Thread

En Java, la concurrència l’aconseguim

utilitzant fils d’execució

Es defineix una classe

derivada de Thread

Codi a executar en

cada fil dins del

mètode run( )

Es llença el fil

amb start ( )

Page 23: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidors concurrents: Diversos fils d’execució

En el fil principal s’executa permanentment el mètode

accept( )

S’espera l’establiment de noves connexions

Per cada client que es connecta, es llença un nou fil

d’execució per gestionar aquesta connexió

Master

Servidor 1

Servidor 2

Servidor 3

Client 1

Client 2

Client 3

Page 24: 1213 Sockets [4] Servidors i fils

Transport

Xarxa

Enllaç

Físic

Servidor 2

Socket

SERVIDORS Servidors concurrents

Ara tenim varis sòcols (sockets) associats al mateix port. Per identificar al sòcol destí s’ha de tenir en compte

l’adreça (adreça IP + port) del sòcol origen.

Servidor 1

Socket

Master Socket

Transport

Xarxa

Enllaç

Físic

Client 1

Socket Transport

Xarxa

Enllaç

Físic

Client 2

Socket

Internet

IP:

132.1.5.5

Port: 1245

IP:

62.7.8.9

Port: 80

IP:

62.7.8.9

Port: 80

IP:

183.7.6.5

Port: 2115

Page 25: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidor concurrent TCP

El servidor enviaria a cada client el temps transcorregut

en milisegons.

Page 26: 1213 Sockets [4] Servidors i fils

SERVIDORS Microservidor web iteratiu

Page 27: 1213 Sockets [4] Servidors i fils

SERVIDORS Microservidor web iteratiu

• La clase StringTokenizer permet dividir un string en

substrings o tokens en base a un altre string.

Per exemple, si treballem amb un string consistent en

nom i cognoms separats per espais en blanc, la classe

StringTokenizer facilitarà trencar aquest string en 3

substrings basat en que el caràcter delimitador és un

espai en blanc.

• El mètode nextToken() retorna una subcadena (String) que

és el següent token de la cadena. Podríem imaginar que,

per cada cop que es crida a aquest mètode hi ha un

apuntador que es posiciona en el següent token.

Page 28: 1213 Sockets [4] Servidors i fils

SERVIDORS Microservidor web iteratiu

El servidor no implementa el protocol

HTTP correctament.

Funciona gràcies a que el navegador

s’adapta.

Page 29: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidor multiprotocol

Inici

Servei A

Servei B Servei C

Es tracta d’un servidor que

proporciona diversos serveis:

Per exemple, servidor d’eco

TCP i UDP en la mateixa

aplicació.

Es llencen varis fils

d’execució perquè un

bloqueig en un accept() o

en un receive() no bloquegi

el funcionament de la resta

de serveis.

Page 30: 1213 Sockets [4] Servidors i fils

SERVIDORS Servidor multiprotocol