PDF de programación - P4_RedFerroviariaSockets_doc.pdf

P4_RedFerroviariaSockets_doc.pdfgráfica de visualizaciones

Publicado el 14 de Enero del 2017
460 visualizaciones desde el 14 de Enero del 2017
464,5 KB
9 paginas
Creado hace 13a (15/11/2010)
Programación Concurrente y Distribuida
Ingeniería Informática
Facultad de Ciencias
Universidad de Cantabria.

Documento:

Red Ferroviaria con Sockets

Autores: José M. Drake
Laura Barros


Santander, 9-10 noviembre, 2011

1. Objetivo

Particionar un aplicación distribuída utilizando la API de sockets, proxys y
servants.

En esta versión del proyecto Red Ferroviaria se distribuye el código en varios
procesadores.

El procesador NodoInfraestructura ejecuta el código relativo a los
elementos situados en tierra (infraestructura) (RedFerroviaria, Tunel,
TramoFerroviario y CentroRegulación).
Hay un procesador NodoTren por cada uno de los trenes que circulan que
ejecuta el código relativo al control de su marcha (Tren). La interacción
entre los trenes y la infraestructura se realiza utilizando el paradigma Proxy-
Servant, y la comunicación entre estos se realiza utilizando sockets.

port [2000]

port [2040] Rojo
port [2050] Azul

n <<Internet>>1

port [2010]

port [2020] Rojo
port [2030] Azul

2. Punto de partida

Partimos de la aplicación RedFerroviariaLockJava, a la que hemos cambiado su
estructura para poder ser distribuida en varios procesadores.
El código se ha separado en dos particiones (paquetes):

El paquete infraestructura: contiene las clases que se instancian en el
procesador NodoInfraestructura.
El paquete equipoMovil: contiene las clases que se embarcan en el
procesador NodoTren.

Las modificaciones que se han hecho respecto de RedFerroviariaLockJava son:

• Finalización de la actividad de los trenes: El método entro() de la clase
CentroRegulación retorna un booleano. Destinado para el tren cuando se accede
al CentroRegulación para anunciar que entra en el centro de regulación.
si es true :actividad del tren debe finalizar definitivamente.
si es false: el tren debe continuar.

la

infraestructura se ha realizado a

• Proxys y Servants: Para facilitar la distribución, la conexión de cada tren con
las clases de
través de parejas
complementarias Proxy-servant. Se han agregado a cada tren instancias de las
clases RedFerroviaria Proxy, TunelProxy y CentroRegulacionProxy, que
constituyen el mecanismo por el que los trenes acceden a los correspondientes
objetos RedFerroviaria, Tunel y CentroRegulacion. Cada proxy ofrece
localmente al tren, el conjunto de operaciones que éste requiere del objeto que
representa.

la RedFerroviaria

instancia de

tiene agregada una

Así mismo,
la clase
RedFerroviariaServant, el Tunel tiene agregado una instancia de la clase TunelServant y
cada CentroFerroviario y TramoFerroviario tienen agregados respectivamente una
instancia de las clases CentroFerroviarioServant y TramoServant. Los servant ejecutan
por delegación en el elemento al que pertenecen los requerimientos que se reciben de
los trenes (a través de los proxies).

Cuando un tren interacciona con un elemento de la infraestructura, lo hace invocando
un método del correspondiente Proxy que es local. Éste, a través de un socket, se
comunica con el correspondiente servant, que se constituye en el intermediario que
ejecuta la interacción con el elemento.

Las interacciones que los trenes realizan sobre los elementos de la infraestructura
pueden ser de dos tipos:

- No bloqueante: No implica ningún bloqueo del thread del tren más allá del
envío de la información y el retorno del cómputo. Ejemplos de este tipo de
interacción son:

o salgo():void de la clase Tunel
o esPosicionLibre(posición,tramo):boolean de la clase RedFerroviaria.

:Tren

:TramoFerroviarioProxy

:TramoFerroviarioServant

:RedFerroviaria

esPosicionLibre()

socket [2000]

sendMsj (esPosicionLibre)

sendMsj (return esPosicionLibre)

esPosicionLibre()

-Bloqueante: El thread del tren se suspende a la espera de un evento de otro
thread. Estas son:

o entro():boolean de la clase Tunel.
o entro(tramo):void de la clase CentroRegulacion.

En este caso el correspondiente servant delega en un thread agente para que
quede a la espera del evento y permita al servant procesar otras peticiones.

:Tren

:TunelProxy

:TunelServant

:Tunel

entro()

sockets [port 2010]

sendMsj (entro())

Toma el lock de
TunelProxy

Suspendido en
read() de socket

sendMsj (return entro())

notify()

x Arquitectura de la aplicación.

Clases incluidas en la partición infraestructura:

:Agente

entro()

Suspendidoen lock
de Tunel

notify()

salgo()

En el siguiente diagrama de clases se muestran las clases del paquete infraestructura
que se instancian en el procesador NodoInfraestructura. Las clases RedFerroviaria,
TramoFerroviario y Tunel son básicamente iguales a las utilizadas en la aplicación no
distribuida RedFerroviariaLockJava.

La clase CentroRegulación es también la misma, salvo que incorpora el mecanismo de
finalización de los trenes. Los cambios son:

Atributo nuevo:

terminado:boolean=false => Vale True si la actividad de los trenes debe
finalizar.

Métodos nuevos:

termina() => Establece que la actividad de los trenes del tramo ferroviario debe
finalizar.
entro():boolean =>

o Bloquea el thread entrante hasta que llegue la hora de salida de tren.
o Retorna true si la actividad del tren que invoca debe terminar.

3. Nuevas Clases

Clase RedFerroviariaServant: Servant que ejecuta los metodos de la RedFerroviaria
que requiere cualquier tren a través del *Proxy complementario utilizando el socket que
se establece entre ellos. Recibe por el socket de puerto 2000 como mensajes los
métodos que los trenes realizan sobre la RedFerroviaria.Invoca el método requerido en
RedFerroviaria y retorna el resultado.

Constructor:

RedFerroviariaServant(laRed:RedFerroviaria)=> Recibe como parámetro
referencia a la RedFerroviaria de la que es servant.

la

Atributos:
laRed:RedFerroviaria => Referencia a la RedFerroviaria sobre el que opera. Se
establece en su constructor
<<final>>PORT:int=2000 => Puerto del socket por el que el
espera de recibir mensajes de los *Proxies complementarios. Es constante [2000].
ServerSocket serv => Server que atiende los requerimientos que recibe de los *Proxies
complementarios por su puerto.

*Servant queda a la

Clase TunelServant: Servant que ejecuta los métodos del Tunel que requiere cualquier
tren a través del *Proxy complementario utilizando el socket que se establece entre
ellos. Recibe por el socket de puerto 2010 como mensajes las invocaciones de los
métodos que los trenes realizan sobre el Tunel. Invoca por el método requerido en
Tunel. Retorna el resultado.

Constructor:
TunelServant(elTunel:Tunel)=> Recibe como parámetro la referencia al Tunel del que
es servant.

Atributos:
elTunel:Tunel => Referencia el Tunel sobre el que opera. Se
constructor.
<<final>>PORT:int=2010 => Puerto del socket por el que el
espera de recibir mensajes de los *Proxies complementarios. Es constante [2010].
ServerSocket serv => Server que atiende los requerimientos que recibe de los *Proxies
complementarios por su puerto.

*Servant queda a la

establece

en

su

Clase CentroRegulacionServant: Servant
del
CentroRegulacion que requiere cualquier tren a través del *Proxy complementario
utilizando el socket que se establece entre ellos. Recibe por el socket de puertos 2020
(tramo Rojo) y 2030 (tramo Azul) como mensajes los métodos que los trenes realizan
sobre el correspondiente CentroRegulacion.
método requerido en
CentroRegulacion. Retorna el resultado.

los métodos

Invoca el

ejecuta

que

Constructor:

CentroRegulacionServant(elCentroRegulacion:CentroRegulacion,
port:int)=> Recibe como parámetro la referencia al CentroRegulación del
que es servant, y el puerto (2020 - tramo Rojo ,2030 - tramo Azul).



Atributos:

elCentroRegulacion:CentroRegulacion => Referencia el CentroRegulacion sobre el
que opera. Se establece en su constructor.
<<final>>PORT:int => Puerto del socket por el que el *Servant queda a la
de recibir mensajes de los *Proxies complementarios. Se establece
en
constructor. Puede tomar los valores [2020] tramo rojo y [2030] tramo azul.

espera
el

ServerSocket serv => Server que atiende los requerimientos que recibe de
*Proxies complementarios por su puerto.

los

TramoFerroviarioServant: Servant

Clase
del
TramoFerroviario que requiere cualquier tren a través del *Proxy complementario
utilizando el socket que se establece entre ellos. Recibe por el socket de puertos 2040
(tramo Rojo) y 2050 (tramo Azul) como mensajes los métodos que los trenes realizan
sobre el correspondiente TramoFerroviario.
método requerido en
TramoFerroviario. Retorna el resultado.

los métodos

que

ejecuta

Invoca el

Constructor:
TramoFerroviarioServant(elTramo:TramoFerroviario,port:int)=> Recibe como
parámetro la referencia al TramoFerroviario del que es servant, y el puerto 2040 -
tramo Rojo ,2050 - tramo Azul).

Atributos:



elTramo:TramoFerroviario => Referencia el TramoFerroviario sobre el que
opera. Se establece en su constructor.
<<final>>PORT:int => Puerto del socket por el que el *Servant queda a la
espera de recibir mensajes de los *Proxies complementarios. Se establece
en el constructor. Puede tomar los valores [2040] tramo rojo y [2050] tramo
azul.

ServerSocket serv => Server que atiende los requerimientos que recibe de

los

*Proxies complementarios por su puerto.

Clases incluidas en la partición equipoMovil:

La clase Tren es básicamente igual a las utilizadas en la aplicación no distribuida, salvo
que se comunica con los elementos incluidos en el paquete infraestructura a través de
  • Links de descarga
http://lwp-l.com/pdf1045

Comentarios de: P4_RedFerroviariaSockets_doc.pdf (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad