Beruflich Dokumente
Kultur Dokumente
Grupo ARCOS Desarrollo de Aplicaciones Distribuidas Ingeniera Informtica Universidad Carlos III de Madrid
Contenidos
1.
1. 2.
Introduccin:
Paradigma cliente/servidor Entorno de programacin Java
2.
1. 2.
Cliente/servidor en Java
Introduccin Ejemplo con sockets
ARCOS @ UC3M
Contenidos
1.
1. 2.
Introduccin:
Paradigma cliente/servidor Entorno de programacin Java
2.
1. 2.
Cliente/servidor en Java
Introduccin Ejemplo con sockets
ARCOS @ UC3M
alto Espacio de objetos, aplicaciones colaborativas Servicios de red, object request broker, agentes mviles procedimientos remotos, mtodos remotos Cliente-servidor, peer-to-peer Paso de mensajes
bajo
ARCOS @ UC3M
Paradigma cliente-servidor
Asigna roles diferentes a dos procesos que colaboran:
Servidor: es el proveedor del servicio. Espera de forma pasiva la llegada de peticiones. Cliente: invoca peticiones al servidor y aguarda su respuesta.
Servidor Cliente 1
Peticin de servicio Proceso cliente Proceso servidor Servicio
...
Cliente 2
ARCOS @ UC3M
Paradigma cliente-servidor
Proporciona una abstraccin eficiente para facilitar los servicios de red. La asignacin de roles asimtricos simplifica la sincronizacin. Paradigma adecuado para servicios centralizados. Ejemplos: servicios de internet como HTTP, FTP, DNS, finger, etc. Implementacin mediante sockets, llamada a procedimientos remotos (RPC) o invocacin de mtodos remotos (RMI).
6 ARCOS @ UC3M
Paradigma peer-to-peer
Asignacin de roles simtrica: Los procesos participantes tienen el mismo papel un mismo proceso puede actuar tanto como cliente como servidor
Solicitud
Proceso 1
Respuesta
Respuesta
Los recursos computacionales y los servicios son intercambiados entre los computadores. Ejemplo: servicios de intercambio de ficheros como Gnutella
Proceso 2
ARCOS @ UC3M
Solicitud
ARCOS @ UC3M
...
ARCOS @ UC3M
2.
Cada participante se subscribe a los mensajes asociados a cada evento (operacin suscribir). Cuando el evento ocurre el middleware distribuye el mensaje a todos los subscriptores (operacin publicar).
Ejemplos de servicio:
MQ*Series de IBM Microsofts Message Queue (MSMQ) Javas Message Service (JMS)
11 ARCOS @ UC3M
Contenidos
1.
1. 2.
Introduccin:
Paradigma cliente/servidor Entorno de programacin Java
2.
1. 2.
Cliente/servidor en Java
Introduccin Ejemplo con sockets
12
ARCOS @ UC3M
Java: caractersticas
Lgica basada en 3 capas:
Presentacin Interfaz con el usuario Lgica de negocio Programa que responde a las peticiones del usuario Lgica de acceso a datos Interfaz con el almacenamiento de datos (ej.: base de datos)
13
ARCOS @ UC3M
Java: caractersticas
14
ARCOS @ UC3M
Contenidos
1.
1. 2.
Introduccin:
Paradigma cliente/servidor Entorno de programacin Java
2.
1. 2.
Cliente/servidor en Java
Introduccin Ejemplo con sockets
15
ARCOS @ UC3M
Paradigma cliente-servidor
Los procesos desempean dos roles asimtricos. Representa el paradigma de sistemas distribuidos con una mayor difusin. Acceso (por parte de los clientes) de servicios de red. Flujo de ejecucin del servidor:
1. 2. 3. 4.
Inicio servicio. Espera hasta aceptar peticin de un cliente. Inicia sesin de servicio con el cliente. Vuelta al paso 2.
16
ARCOS @ UC3M
Paradigma cliente-servidor
Proceso servidor
Inicia canal
Proceso cliente
Inicia canal
Abrir conexin
peticin
escucha Aceptacin
Peticin
escritura
lectura Cierre
Respuesta
escritura
cierre
17
ARCOS @ UC3M
Paradigma cliente-servidor
cliente Peticin 1 servidor
Protocolo de servicio:
Localizacin del servicio. Comunicacin entre procesos.
Sin conexin Orientados a conexin
18
ARCOS @ UC3M
Paradigma cliente-servidor
Gestin de la sesin por parte del servidor:
peticin
Servidor iterativo
Cliente
respuesta
peticin
servidor
Cliente
respuesta
servidor
Crea proceso
Proceso hijo
ARCOS @ UC3M
Paradigma cliente-servidor
Servidor concurrente
Servidor mensaje echo mensaje echo mensaje echo mensaje echo mensaje echo cliente 1 cliente 2
Servidor secuencial
Servidor mensaje echo mensaje echo mensaje echo mensaje echo mensaje echo cliente 1 cliente 2
20
ARCOS @ UC3M
Paradigma cliente-servidor
cliente Peticin 1 Respuesta 1 Peticin 2 Respuesta 2 servidor cliente Peticin 1 Respuesta 1 Peticin 2 Respuesta 2
servidor
Peticin n Respuesta n
Peticin n Respuesta n
21
ARCOS @ UC3M
Tipos de servicios
Sin estado Ej.: daytime, echo, etc. Con estado Con estado global Ej.: counter Con estado de sesin Ej.: ftp Servidor hbrido: informacin del estado se distribuye entre el servidor y el cliente.
22
ARCOS @ UC3M
Contenidos
1.
1. 2.
Introduccin:
Paradigma cliente/servidor Entorno de programacin Java
2.
1. 2.
Cliente/servidor en Java
Introduccin Ejemplo con sockets
23
ARCOS @ UC3M
Ejemplo (streams)
NCLEO
NCLEO RED
24
ARCOS @ UC3M
Mquina A cliente
sumar(5,2)
Client.java (1/2)
import java.io.* ; import java.net.* ;
NCLEO
resultado = 7
NCLEO RED
public class Client { public static void main ( String [] args) { int res; int num[] = new int[2]; if (args.length != 1) { System.out.println("Uso: cliente <host>"); System.exit(0); } try { String host = args[0]; Socket sc = new Socket(host, 2500); // socket servidor OutputStream ostream = sc.getOutputStream(); ObjectOutput s = new ObjectOutputStream(ostream); 25 ARCOS @ UC3M
Mquina A cliente
sumar(5,2)
Client.java (2/2)
NCLEO
resultado = 7
NCLEO RED
//prepara la peticin
DataInputStream istream = new DataInputStream(sc.getInputStream()); res = istream.readInt(); sc.close(); System.out.println("La suma es " + res); } catch (Exception e) { System.err.println("excepcion " + e.toString() ); e.printStackTrace() ; } } }
26
ARCOS @ UC3M
Mquina A cliente
sumar(5,2)
Server.java (1/2)
import java.io.* ; import java.net.* ; public class Server {
NCLEO
resultado = 7
NCLEO RED
public static void main ( String [] args) { ServerSocket serverAddr = null; Socket sc = null; int num[] ; int res; try { serverAddr = new ServerSocket(2500); } catch (Exception e){ System.err.println("Error creando socket"); }
27
ARCOS @ UC3M
Mquina A cliente
sumar(5,2)
Server.java (2/2)
while (true) { try {
NCLEO
resultado = 7
NCLEO RED
sc = serverAddr.accept(); // esperando conexin InputStream istream = sc.getInputStream(); ObjectInput in = new ObjectInputStream(istream); num = (int[]) in.readObject(); res = num[0] + num[1]; Thread.sleep(2000); DataOutputStream ostream = new DataOutputStream(sc.getOutputStream()); ostream.writeInt(res); ostream.flush(); sc.close(); } catch(Exception e) { System.err.println( "excepcion " + e.toString() ); e.printStackTrace() ; } // try } // while } // main } // servidor
28
ARCOS @ UC3M
29
ARCOS @ UC3M
# java Server & # java Client Uso: cliente <host> # java Client localhost La suma es 7
30
ARCOS @ UC3M
Ejemplo 2 (streams)
NCLEO
NCLEO
NCLEO RED
31
ARCOS @ UC3M
Mquina A cliente
sumar(5,2)
Server2.java (1/3)
import java.io.* ; import java.net.* ; import java.lang.Thread ; class clientHandler implements Runnable { private Socket socket ; Thread t ; public clientHandler ( Socket socket ) { this.socket = socket ; this.t = new Thread(this) ; t.start() ; }
NCLEO
resultado = 7
NCLEO RED
32
ARCOS @ UC3M
Mquina A cliente
sumar(5,2)
Server2.java (2/3)
public void run () { int num[] ; int res; try {
NCLEO
resultado = 7
NCLEO RED
InputStream istream = socket.getInputStream(); ObjectInput in = new ObjectInputStream(istream); num = (int[]) in.readObject(); res = num[0] + num[1]; Thread.sleep(2000); DataOutputStream ostream = new DataOutputStream(socket.getOutputStream()); ostream.writeInt(res); ostream.flush(); socket.close(); } catch (Exception e) { System.err.println("Error al operar con el cliente"); } } // run } // clientHandler 33 ARCOS @ UC3M
Mquina A cliente
sumar(5,2)
Server2.java (3/3)
public class Server2 { public static void main ( String [] args) { ServerSocket serverAddr = null; Socket sc = null; try { serverAddr = new ServerSocket(2500); while (true) {
NCLEO
resultado = 7
NCLEO RED
sc = serverAddr.accept(); // esperando conexin new clientHandler(sc) ; } } catch (Exception e) { System.err.println("excepcion " + e.toString() ); e.printStackTrace() ; } } // main } // servidor
34
ARCOS @ UC3M
clients.sh
#!/bin/sh set -x I=0 while [ $I -lt 10 ]; do java Client localhost & I=`expr $I + 1` done
35
ARCOS @ UC3M
36
ARCOS @ UC3M
Cliente/Servidor en Java
Grupo ARCOS Desarrollo de Aplicaciones Distribuidas Ingeniera Informtica Universidad Carlos III de Madrid