Socket x RMIAula de Monitoria:Bruno Pereira - bpe
Davi Pires - dprGuilherme Barros – gbs2Thiago Cavalcanti - trc
Roteiro Conceitos de Sockets Conceitos de RMI Comparação Exemplo de Implementação Exercício (NOTA)
Conceitos de Sockets Relembrando ... Uma porta de um canal de
comunicação que permite a um processo executando num computador enviar/receber mensagens para/de outro processo.
Usado para representar uma conexão entre um cliente e um servidor
Conceitos de Sockets Interface entre o processo da
aplicação e a camada de transporte Cada processo é identificado por
uma porta e um ip Principais tipos de Sockets:
stream sockets (UDP) datagram sockets (TCP)
Descrição do fluxo (sockets)
Conceitos de RMI Remote Method Invocation Orientado à objetos Comunicação remota Componentes
Interface Remota Classe remota que implementa a
interface Rmiregistry Stubs e Skeletons
Observações Importantes(1/2) Tratar exceções Servidor de
Nomes
Observações Importantes(2/2) Os métodos remotos podem
receber e retornar objetos Estes objetos devem implementar
a interface Serializable Tipos primitivos são passados por
valor e objetos por referência nas chamadas dos métodos
Descrição do fluxo (RMI)
Como funciona RMI O cliente chama o método remoto
usando um Stub O Stub então envia uma mensagem
para o Skeleton na máquina remota, contento os argumentos da chamada ao método remoto
O Skeleton empacota a resposta e envia ela de volta para o stub na máquina do cliente
Vejamos na Prática
JVM 1 JVM 2
Cliente Servidor
a1(A)
B1_Stub(B Stub) B Skel b1
(B)
A BB Stub
(1) (2) (3)
(4)(5)(6)
ComparaçõesSocket RMI
Transporte UDP / TCP JRMPDescrição do Serviço Não existe Java InterfaceLocalização Conhece endereço RMI Naming ServiceLook Up matching Não existe Exact String MatchRemote reference Socket Proxy objectSynchronicity Synchronous SynchronousGarbage Collection Não existe Não existeLanguage paradigm Streams Method call
Execution Local Remote Local Remote Local Remote Local Remote Local Remote
No Sockets Sockets CorbaSII(*)CorbaSII(*)CorbaSII(**)CorbaSII(**)CorbaDII CorbaDII RMI RMI
1 0,340 0,521 1,021 1,031 1,022 1,071 1,061 1,071 0,941 1,1222 0,350 0,520 1,021 0,982 1,111 1,101 1,512 1,101 0,931 1,1113 0,351 0,511 1,021 1,022 1,051 1,081 1,142 1,082 0,931 1,1524 0,370 0,520 1,061 1,011 1,382 1,031 1,513 1,152 0,931 1,1525 0,351 0,551 1,312 1,011 1,101 1,122 1,181 1,102 0,941 1,1526 0,351 0,530 1,332 1,022 1,382 1,112 1,061 1,071 0,931 1,1017 0,350 0,510 1,212 1,001 1,102 1,142 1,462 1,202 0,921 1,1328 0,371 0,521 1,182 1,021 1,042 1,081 1,162 1,102 0,931 1,1029 0,351 0,531 1,082 1,061 1,052 1,161 1,132 1,072 0,932 1,15110 0,350 0,541 1,062 1,021 1,382 1,141 1,131 1,152 0,941 1,102
Local Remote Local Remote Local Remote Local Remote Local Remote
Stadistics Sockets Sockets CorbaSII(*)CorbaSII(*)CorbaSII(**)CorbaSII(**)CorbaDII CorbaDII RMI RMI
average 0,354 0,526 1,131 1,018 1,163 1,104 1,236 1,111 0,933 1,128max 0,371 0,551 1,332 1,061 1,382 1,161 1,513 1,202 0,941 1,152min 0,340 0,510 1,021 0,982 1,022 1,031 1,061 1,071 0,921 1,101
stdev 0,010 0,013 0,121 0,020 0,154 0,039 0,184 0,044 0,006 0,023
Notes: CorbaSII(*) = Corba static invocation using the Visigenic osagent location serviceCorbaSII(**) = Corba static invocation using the standard Naming service
Comparando a Velocidade
Implementação
Exemplo: Envio de mensagens para um servidor Interface: ServidorInt.java Servidor:
Servidor.java Cliente:
Cliente.java
ServidorInt.javaimport java.rmi.*;
public interface ServidorInt extends Remote{
void imprimeMensagem(String mensagem) throws RemoteException;
}
Servidor.javaimport java.rmi.*; import java.rmi.server.*; import sun.rmi.registry.RegistryImpl;
public class Servidor extends UnicastRemoteObject implements ServidorInt { public Servidor() throws RemoteException { super(); RegistryImpl impl = new RegistryImpl(1099); } public void imprimeMensagem(String mensagem) { System.out.println("A mensagem enviada foi : " + mensagem); } public static void main(String args[]) { try { Servidor s = new Servidor(); Naming.rebind("servidor", s); System.out.println("Servidor Registrado"); } catch (Exception e) { System.out.println("Erro : Mensagem : " + e.getMessage()); e.printStackTrace(); } }}
Cliente.javaimport java.rmi.*;import java.io.*;
public class Cliente implements Serializable {
public static void main(String args[]) { try { ServidorInt s = (ServidorInt) Naming.lookup("servidor"); s.imprimeMensagem(“Hello CIn!"); } catch (Exception e) { System.out.println("Erro: Mensagem: " + e.getMessage()); e.printStackTrace(); } }}
DicasTutorial de como Gerar Stub/Skeleton do
Servidor.java
Passo-a-Passo:1. No JBuilder, clicar com o botão direito no
arquivo Servidor.java, na janela do projeto2. Selecionar Propriedades3. Em Build
Dentro de RMI Compiler SettingsMarque Generate RMI stub/skeleton
Processo de Criação da AplicaçãoCompilar os arquivosGerar o stub/skeletonAtivação do serviço de nomesAtivação as aplicações
Exercício
ExercícioMini-Projeto:Solução para uma rede de locadoras usando RMI.Descrição: Cada filial tem as informações (número, nome e
débito) de seus clientes. O cliente pode locar filmes em qualquer locadora. As locadoras possuem ligação com um servidor
central, o qual tem uma lista da localização (em qual filial) de todos os clientes cadastrados
Existirão 4 locadoras, 1 servidor central e 8 clientes (dois em cada locadora)
ExercícioExemplo:O cliente 1, chega na locadora A e pede
para locar um DVD. O cliente 1 foi, anteriormente, cadastrado na locadora B, logo, a locadora A, vai requisitar as informações do cliente 1 para o servidor central. O servidor central localizará o cliente e solicitará as informações do mesmo à sua locadora de cadastro. Com as informações em mãos, o funcionário decidirá se o cliente pode ou não locar o DVD.
ExercícioObservações: É necessário apenas o nome do cliente e
saber o valor do débito. Logo, se ele estiver devendo, não será possível locar outro DVD.
As operações realizadas pela locadora serão: Consultar débito Atualizar débito Adicionar Cliente Remover Cliente
Não é necessário ter GUI´s
Entrega 20/07/2005
Referências http://www-asc.di.fct.unl.pt/rc/aulas-praticas/aulas/
aula1/docs/ProgSocketsTCPJava.pdf http://www.inf.unisinos.br/~cac/java/material/
aula12pr.pdf http://asc.di.fct.unl.pt/sd1/aulas-praticas/materiais/
aula3/docs/Aula3-RMI.pdf http://atlas.ucpel.tche.br/~dubois/progavancada/05-
RMI.pdf http://twiki.im.ufba.br/pub/MAT570/Material/mat570-rmi-
6pp.pdf http://ltodi.est.ips.pt/nribeiro/Lecturing/SD_01-02/4 http://www-ece.engr.ucf.edu/~jza/publications/munoz.doc http://www.huihoo.com/middleware/compare.html
Top Related