cosa è una applicazione distribuita? più programmi in esecuzione su computer diversi che...

18
Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide Web, Ftp, Telnet Prestazioni dipendenti da banda e latenza, piuttosto che da potenza (memoria, velocità processore) del singolo computer

Upload: federica-nardi

Post on 02-May-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Cosa è una applicazione distribuita?

Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice

Esempi: World Wide Web, Ftp, Telnet

Prestazioni dipendenti da banda e latenza, piuttosto che da potenza (memoria, velocità processore) del singolo computer

Page 2: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Paradigmi di programmazione

Interazione tra i vari componenti indipendente dalla locazione fisica e trasparente per l’utente.

Approcci:

CLIENT/SERVER

REMOTE EVALUATION

CODE ON DEMAND

AGENTI MOBILI

Page 3: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Client-ServerUn Programma Client richiede servizi messi a disposizione da un programma Server (anche sulla stessa macchina)

Esempi Telnet: Permette di operare su un computer remoto come se fosse localeX-Window: ogni applicazione per accedere al display chiede servizi al server X-window

Vengono scambiati solo dati

Clie nt PCs

Server

Richieste

Risposte

Page 4: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Remote EvaluationUn programma X usa le risorse sulla macchina in cui risiede un programma Y, fornendo ad Y il codice per usarle.

Architettura Client/Server Programmabile.

Esempio: Uso di una periferica

Word usa le risorse della periferica inviando i comandi necessari per produrre l’output desiderato

Clie nt PCs

Word

Comandi

Output Desiderato

Page 5: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Code On DemandUn programma X ha le risorse da utilizzare e chiede ad un programma Y le istruzioni da eseguire

Esempio:

1) Il browser ha le risorse (monitor, primitive grafiche)

2) Il server cerca il documento richiesto e lo invia al browser

3) Il browser interpreta il documento e lo presenta all’utente

Clie nt PCs

Web ServerBrowser

Richieste

Risposte con codice

Page 6: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Agenti MobiliUn programma X si trasferisce su un altro computer con i suoi dati e continua la sua esecuzioni lì.

Es. La macchina su cui risede X non ha la potenza di calcolo necessaria. X si trasferisce su un computer potente, effettua le operazioni e infine ritorna sul computer da cui era partito

Conseguenze:

Riduzione utilizzo della rete (solo 2 comunicazioni) rispetto alla chiamata di diversi servizi su server

Page 7: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Cosa offre JAVA-Socket

Classi utilizzabili dall’utente per scrivere facilmente applicazione Client/Server

-Remote Method Invocator RMIPermette ad oggetti su computer diversi di comunicare tra loro

-Downloading dinamico della classiGli Applet sono un esempio di code-on-demand

-Serializzazione degli oggettiAnche i threads sono oggetti che possono essere spediti: remote-evaluation(N.B. Lo stato di esecuzione del thread non può essere serializzato; artifici per gli agenti mobili)

Punto di forza: Indipendenza dalla piattaforma!Anche il codice può essere scambiato.

Page 8: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Esercitazione JAVA:Socket (25/01)

Page 9: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Sommario: java.net

• La classe InetAddress: rappresentazione degli indirizzi IP

• Un programma che parla con un altro: approccio Client/Server

• Le Classi Socket e ServerSocket• Esempi: EchoClient, HTTP Client

Page 10: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Cosa è un Socket?Il Socket il punto di ingresso/uscita di un programma verso un altro programma.

Come si indirizza un programma? Macchina su cui corre (host name o IP) + identificativo del programma (numero di porta)

Da un punto di vista astratto..

Server Client

Richiesta connessione:Host name + port number

Accept

Page 11: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Cosa è un Socket?Supponiamo arrivi un altro client..

Il server ha adesso 2 Socket attivi (due collegamenti con applicativi esterni..). Ogni Socket e’ individuato da 4 parametri:

IP + porta locale

IP + porta remotaRichiesta connessione:Host name + port numberAccept

Server Client

Client

2 Socket diversi con la stessa porta locale!

Page 12: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Implementazione di Socket

Aggiungere un oggetto Socket ad un applicativo consente la comunicazione con altri applicativi!

Nel package java.net esistono due diverse classi che implementano il concetto di Socket: una per il socket nel programma Server e l’altra per il socket nel programma Client.

ServerSocket(int port) ServerSocket(int port, int count)

Socket(String host, int port) Socket(InetAddress adr, int port)

ServerSocket: occorre specificare porta di ascolto e/o numero max di client;

Server (Client): occorre specificare host di destinazione (nome host o IP) e numero di porta del server.

Page 13: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Rappresentazione di un Host

•2 Modi possibili: Concetto: Nome host -> Implementazione: String Concetto: Indirizzo IP -> Implementazione: Classe InetAddress Si puo’ passare dall’una all’altra rappresentazione molto semplicemente; l’utente non deve occuparsi di nulla (es. Interrogazione DNS)

InetAddress

Page 14: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Esempio: uso di InetAddress• class IPDemo{• public static void main(String[] args) throws Exception {• InetAddress a, my;•• //Metodi statici: non si riferiscono ad un• //oggetto in particolare• a = InetAddress.getByName("www.tti.unipa.it");• my = InetAddress.getLocalHost();

• //Metodi propri: si applicano ad un oggetto di• //tipo InetAddress• String hostIP = a.getHostAddress();• String host = a.getHostName();•• String myhost = my.getHostName();• String myIP = my.getHostAddress();

• }• }

Consente di ottenere la risoluzione dei nomi e degli indirizzi

Page 15: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Esempio: L’Echo Server3 Passi fondamentali:

a) Mettere un Socket in Ascolto specificando un numero di portaServerSocket listen = new ServerSocket(port);

b) Aspettare l’arrivo del cliente (istruzione bloccante)Socket client = listen.accept();

c) Collegare opportunamete gli stream di ingresso e di uscita per eseguire il servizio (tutto quello che arriva da in deve andare su out):

InputStream i = client.getInputStream();OutputStream o = client.getOutputStream();

BufferedReader in = new BufferedReader(newInputStreamReader(i));

PrintWriter output = new PrintWriter(o);

o

i

output

(InputStreamReader)inServer

Page 16: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Cosa succede quando si accetta un Client?

Server Client

L’utente non deve preoccuparsi di nulla. Astraendo completamente da tutto quello che succede sotto, tra server e client puo’ semplicemente considerare instaurato un condotto di bit in entrambe le direzioni.

Page 17: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Esempio: L’Echo Client3 Operazioni fondamentali:

a) Fare una richiesta di connessione ad un serverSocket server = new Socket(“localhost”, port);

b) Verificare che la richiesta sia accolta (non si generano eccezioni: es. Host sconosciuto, connessione rifiutata, etc. )

try… catch(Exception e) c) Collegare opportunamete gli stream di ingresso e di uscita per

attivare la fruizione del servizio (stream verso i socket e verso la tastiera):

InputStream i = client.getInputStream();OutputStream o = client.getOutputStream();

BufferedReader in = new BufferedReader(newInputStreamReader(i));

BufferedReader stdIn = new BufferedReader( new InputStreamReader(System.in));PrintWriter output = new PrintWriter(o);

Page 18: Cosa è una applicazione distribuita? Più programmi in esecuzione su computer diversi che collaborano scambiandosi dati o anche codice Esempi: World Wide

Esercizi

• Scrivere un programma che legga da tastiera il nome di un host e restituisca l’indirizzo IP dell’host.

• Dopo aver visto in funzione Echo Client ed Echo Server, provare ad implementare un server che restituisca l’echo invertito (usare la classe StringBuffer e il metodo reverse).

• Scrivere un programma server che letto da client il nome di un file testo del suo archivio, provvede ad inviarlo al cliente.