18
Comunicação Distribuída - Socket Prof. Adriano Teixeira de Souza

Sistemas Distribuídos - Comunicação Distribuída - Socket

Embed Size (px)

Citation preview

Page 1: Sistemas Distribuídos - Comunicação Distribuída - Socket

Comunicação Distribuída - Socket

Prof. Adriano Teixeira de Souza

Page 2: Sistemas Distribuídos - Comunicação Distribuída - Socket

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

Page 3: Sistemas Distribuídos - Comunicação Distribuída - Socket

Aplicação

Transporte

Rede

Enlace

Física

Aplicação

Transporte

Rede

Enlace

Física

Prof. Adriano Teixeira de Souza

Page 4: Sistemas Distribuídos - Comunicação Distribuída - Socket

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

Page 5: Sistemas Distribuídos - Comunicação Distribuída - Socket

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

Page 6: Sistemas Distribuídos - Comunicação Distribuída - Socket

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

Page 7: Sistemas Distribuídos - Comunicação Distribuída - Socket

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

Page 8: Sistemas Distribuídos - Comunicação Distribuída - Socket

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

Page 9: Sistemas Distribuídos - Comunicação Distribuída - Socket

É 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

Page 10: Sistemas Distribuídos - Comunicação Distribuída - Socket

Prof. Adriano Teixeira de Souza

Page 11: Sistemas Distribuídos - Comunicação Distribuída - Socket

Prof. Adriano Teixeira de Souza

Page 12: Sistemas Distribuídos - Comunicação Distribuída - Socket

É 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

Page 13: Sistemas Distribuídos - Comunicação Distribuída - Socket

Prof. Adriano Teixeira de Souza

Page 14: Sistemas Distribuídos - Comunicação Distribuída - Socket

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

Page 15: Sistemas Distribuídos - Comunicação Distribuída - Socket

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

Page 16: Sistemas Distribuídos - Comunicação Distribuída - Socket

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

Page 17: Sistemas Distribuídos - Comunicação Distribuída - Socket

• 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

Page 18: Sistemas Distribuídos - Comunicação Distribuída - Socket

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