sistemas distribuídos - comunicação distribuída - socket
Post on 06-Jun-2015
3.838 Views
Preview:
TRANSCRIPT
Comunicação Distribuída - Socket
Prof. Adriano Teixeira de Souza
Estratégias diferentes que permitem a comunicação entre aplicações distribuídas.
Tipos distintos de comunicação em um sistema distribuído:
◦ Sockets
◦ RMI - Remote Method Invocation
◦ CORBA – Commom Object Request Broker Architecture
◦ EJB – Enterprise Java Bean
◦ Web Services
Prof. Adriano Teixeira de Souza
Aplicação
Transporte
Rede
Enlace
Física
Aplicação
Transporte
Rede
Enlace
Física
Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
Aplicação
Transporte
Rede
Enlace
Física
Aplicação
Transporte
Rede
Enlace
Física
HTTP,RMI, etc
TCP e UDP
IPv4 e IPv6
Ethernet e ATM
Principais Características: ◦ Protocolo da camada de transporte ◦ Complexo ◦ Orientado à conexão ◦ Confiável ◦ Detecção de Erros ◦ Controle de Congestionamento ◦ Menos performático do que UDP ◦ Utilizado em diversas aplicações: FTP, email, HTTP,
RMI, etc...
Prof. Adriano Teixeira de Souza
TCP usa duas abstrações chamadas Sockets e Portas
Portas e Sockets não existem fisicamente
Em Java, um socket é um objeto que sabe como enviar e receber dados de (e para) um outro computador através de uma rede
Java Sockets usam TCP, apesar que não é necessário saber isso para usar Sockets (encapsulamento)
Prof. Adriano Teixeira de Souza
Servidores (Servers) são computadores que disponibilizam
serviços através de Portas
Cada serviço é disponibilizado através de uma porta
Quando queremos usar um serviço, usamos TCP, informando o endereço IP da máquina e a Porta do serviço
Por exemplo, o serviço de um HTTP server normalmente atende pela porta 80 (default)
Entretanto, muitos Application Server (Tomcat por exemplo) são normalmente configurados para atender pela porta 8080
Prof. Adriano Teixeira de Souza
Exemplos:
◦ http://172.17.0.13/ (acesso pela porta 80)
◦ http://172.17.0.14:8080/ (acesso pela porta 8080)
◦ mysql://arcoverde:3306/jornada
◦ rmi://localhost:1099/server
Prof. Adriano Teixeira de Souza
É representado pela classe java.net.Socket
Usa TCP, logo herda todas as características dele (principalmente a confiabilidade)
Exemplo de Construtor:
public Socket(String ipserver, int porta) throws
IOException;
Após o construtor executar, o socket já estará apto para se comunicar
Se o socket não conseguir se comunicar, será lançada uma IOException
Permite escrita e leitura através de Input e OutputStream´s
Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
É representado pela classe java.net.ServerSocket
A função principal de um ServerSocket é aguardar pela conexão de um Socket
Um dos construtores mais utilizados é:
public ServerSocket(int porta) throws IOException;
Se o ServerSocket não conseguir se instalar na porta, será lançada uma IOException
Diferente do Socket, após o construtor executar, o ServerSocket deverá chamar acept() para aguardar uma conexão
acept() retorna um socket. Após acept() retornar, o ServerSocket poderá se comunicar com este socket.
Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
Objetos são estruturas complexas
◦ Possuem vários atributos
◦ Seus atributos podem ser outros objetos
◦ Que possuem mais atributos
◦ Criando uma estrutura em árvore
Como enviar via rede um objeto complexo? ◦ Com serialização
Prof. Adriano Teixeira de Souza
Serialização é o processo de transformar uma estrutura de dados complexa, como um objeto, em uma série de bytes
A série gerada é “enviada pelo fio” da rede
Do outro lado, o objeto é rematerializado
Graças ao Java Team, a JVM faz isso para nós
Basta que indiquemos que a classe do objeto implementa a interface java.io.Serializable
Obs.: os atributos do objeto devem ser Serializable também
Isso é o mesmo processo usado para se gravar um objeto em um arquivo
Prof. Adriano Teixeira de Souza
Se você tentar enviar um objeto via rede que não pode ser serializado, será lançada uma UnmarshalException
Marshaling e UnMarshaling são outros nomes dados para os processos de Desmaterizalizar e Materializar o objeto
Quando ocorrer, observe se o objeto que você está enviando é Serializable (lembre-se dos atributos)
Prof. Adriano Teixeira de Souza
• O normal é que tenhamos vários clientes para poucos servidores
• Assim, um servidor deve poder atender a vários clientes ao mesmo tempo
• Isto é feito escalonando Threads no lado do servidor, de forma que cada Thread cuide de um cliente
Prof. Adriano Teixeira de Souza
As aplicações que utilizam a rede são complexas
A complexidade vêm normalmente por uma gama de serviços de infra-estrutura que são necessários para a execução do sistema propriamente dito ◦ Por exemplo: localização, chamadas de métodos, tolerância a falhas, etc...
Por que são muito simples, com sockets podemos apenas
enviar e receber dados
Implementar todas as funcionalidades infra-estruturais utilizando diretamente sockets pode ser um trabalho custoso, repetitivo e, na maioria das vezes, complexo
Para diminuir as responsabilidades das aplicações (e dos desenvolvedores delas), são utilizados plataformas de software que realizam funcionalidades de infra-estrutura que são comuns aos sistemas
Prof. Adriano Teixeira de Souza
top related