Comunicação Distribuída Estratégias diferentes que permitem a comunicação entre aplicações distribuídas Estratégias Distintas • Sockets • RPC - Remote Procedure Call • RMI - Remote Method Invocation • CORBA – Commom Object Request Broker Architecture Conceito de Porta • Uma porta é um ponto de interação entre uma aplicação e o sistema operacional da máquina. • Proporciona à aplicação uma forma de estabelecer um canal de comunicação com o sistema operacional da máquina. • É representada por um endereço numérico. Sockets • Um socket é um mecanismo de baixo nível, definido como uma extremidade de um canal de comunicação. • Um par de processos (thread) se comunica em uma rede utilizando um par de sockets – um para cada processo. • Um mecanismo do TCP/IP que permite que processos distribuídos se comuniquem em uma rede. • Um socket é formado por um endereço IP concatenado com um número de porta. Sockets • Um mecanismo de baixo nível, entre processos ou threads distribuídos, que permitem a troca de um fluxo não-estruturado de bytes entre os threads em comunicação. Sockets Java • Sockets orientados a conexão (TCP): Classes: Socket, ServerSocket • Sockets sem conexão (UDP): Classe: DatagramSocket • Socket de difusão (multicast): Classe: MultcastSocket Estruturando os Dados na Comunicação • É responsabilidade da aplicaçãocliente, o da aplicação-servidor impor uma estrutura de dados. • Existem dois métodos alternativos de comunicação em nível mais alto: RPC e RMI RPC • Permite que um processo ou uma thread chame um procedimento ou função em outro processo, que pode estar em um espaço de endereçamento separado na mesma máquina ou pode estar executando em um computador remoto conectado por uma rede. Vantagens do RPC • Gerencia o canal de comunicação, de forma que os programas aplicativos podem ser escritos de modo que a localização de um procedimento, quer local ou remoto, seja transparente. • Mostrar figuras ... RMI • É um recurso Java. • Permite que uma thread invoque um método em um objeto remoto, o qual reside em uma máquina virtual Java (JVM) distinta que pode estar no mesmo computador ou em uma JVM em um computador remoto conectado por rede. RMI • RMI baseia-se em objetos: suporta a invocação de métodos em objetos remotos. • Com RMI é possível passar objetos como parâmetros para os métodos remotos. • Torna possível aos usuários desenvolver aplicações Java que sejam distribuídas por toda a rede. RMI • Para tornar os métodos remotos transparentes ao cliente e ao servidor, RMI implementa o objeto remoto usando stubs e skeletons. • Um stub é um proxy (representante)do objeto remoto, que reside junto ao programa-cliente. RMI • Quando o programa-cliente invoca um método remoto, é esse stub para o objeto remoto que é chamado. • Um stub no cliente serve para criar uma mensagem consistindo do nome do método a ser invocado no servidor e nos parâmetros desse método. RMI • O stub envia então essa mensagem para o lado do servidor, onde a mensagem é recebida pelo skeleton do objeto remoto. • O skeleton então faz a extração dos parâmetros e invoca o método desejado no objeto remoto do lado servidor. RMI • O skeleton agrega o valor de retorno (ou exceção) em uma mensagem e retorna-a ao programa-cliente. • O stub efetua a extração do valor de retorno e o passa para o cliente. RMI • É uma tecnologia Java nativa e por isso requer que todas as aplicações distribuídas sejam escritas em Java. • Muitos sistemas existentes que talvez queiramos que seja distribuídos são escritos em C, C++, Ada, COBOL, Smaltalk, ou outra linguagem. • CORBA permite a comunicação entre aplicações cliente e servidor heterogêneas. CORBA