Sistemas Distribuídos LICENCIATURA EM COMPUTAÇÃO Prof. Adriano Avelar Site: www.adrianoavelar.com Email: eam.avelar@gmail.com
Mecanismos de Comunicação
Voltando ao exemplo da calculadora... Rede local doméstica ufra.edu.br Internet Cliente Implementação
Mecanismos de comunicação Middleware Candidatos atuais a mecanismos de comunicação? Protocolos de Aplicação (ex., HTTP, SMTP, SOAP, etc) IPCs Tradicionais (ex., SOCKET, Memória Compartilhada,etc)
IPCs Tradicionais (SOCKETs) Pode ser usado para construir aplicações distribuídas. É a forma mais baixo nível de construção de aplicações distribuídas.
Pilha de protocolos dos Modelos OSI e TCP/IP
Visão Geral Socket Fonte: https://www.youtube.com/watch?v=aedv0wlwxts
Sockets UDP e TCP Ideia surgida com o sistema UNIX de Berkeley BSD Unix A comunicação entre dois processos consiste na transmissão de uma mensagem de um socket num processo para um socket em outro processo.
Sockets UDP e TCP Nos protocolos da internet, as mensagens são enviadas para um par: ENDEREÇO (IPv4 ou IPv6) PORTA O socket de um processo tem que ser conectado a uma porta local para que possa começar a receber mensagens Após criado o socket serve tanto para receber como para enviar mensagens O número de portas disponíveis por computador é 2 16 Para receber mensagens, um processo pode usar várias portas simultaneamente, mas não pode compartilhar uma porta com outro processo diferente no mesmo computador (Exceção: processos que usem IP multicast) Cada socket é associado a um determinado protocolo, UDP ou TCP.
Comunicação através do protocolo UDP A comunicação entre dois processos é feita através dos métodos send e receive. Um pacote de dados ( datagram ) é enviado por UDP sem confirmação ( acknowledgement ) nem retransmissão. O UDP não garante a entrega da mensagem. Nem a ordem de chegada das mensagens. A porta do servidor terá que ser conhecida pelos processos clientes. O cliente pode usar qualquer porta local para conectar o seu socket, não é necessário especificar a porta do cliente.
Comunicação através do protocolo UDP O processo que invocar o método receive (cliente ou servidor) recebe o IP e a PORTA do processo que enviou a mensagem, juntamente com os dados da mensagem. O receptor da mensagem, tem que definir um array (buffer) com dimensão suficiente para os dados da mensagem, caso contrário, a mensagem precisa ser fragmentada. O IP permite mensagens até 2 16 bytes, (tamanho padrão - 8KB)
UDP Send Operações não bloqueáveis send não bloqueável O processo retorna do send assim que a mensagem é enviada Se nenhum processo estiver ligado ao socket, a mensagem é descartada
UDP Receive Operações boqueáveis receive bloqueável O processo que executa o receive, bloqueia até que consiga ler a mensagem para o buffer do processo Enquanto espera por uma mensagem o processo pode criar uma nova thread para executar outras tarefas Ao socket pode ser associado um timeout, no o qual o receive desbloqueia o processo.
Classe DatagramSocket em Java Permite criar um socket na máquina local Possui os métodos send e receive Construtor sem argumentos, usa a primeira porta disponível (Cliente) Construtor com argumentos, especifica-se o nº da porta (Servidor) Se a porta já está em uso é lançada a exceção SocketException
UDPServer.java
UDPClient.java
Comunicação através do protocolo TCP Utiliza stream (fluxos) para ler/escrever dados. A aplicação é que decide quantos bytes devem ser enviados ou lidos da stream, sem a preocupação do tamanho máximo de pacotes. O protocolo TCP usa um esquema de confirmação de recepção das mensagens. Se necessário retransmite a mensagem.
Comunicação através do protocolo TCP Controle de fluxo de execução: O TCP tenta uniformizar as velocidades dos processos que lêem e escrevem de/numa stream. Se quem escreve é muito mais rápido do que quem lê, então o processo que escreve é bloqueado até que o outro processo leia dados suficientes. Ordenação e duplicação de mensagens: Identificadores de mensagens são associados com cada pacote de dados, permitindo ao receptor detectar e rejeitar mensagens duplicadas ou reordenar mensagens fora de ordem.
Comunicação através do protocolo TCP Modelo de comunicação: Quando dois processos tentam estabelecer uma ligação através de Sockets TCP, um dos processos desempenha o papel de cliente e outro de servidor. Depois de estabelecida a ligação podem comportar-se como processos pares.
TCPServer.java
TCPClient.java
Trabalho Desenvolver uma aplicação cliente/servidora que usa sockets como meio de comunicação. Ex.: Banco, Calculadora, Cadastro de usuário, biblioteca etc. Não precisa ter GUI. Máximo 2 pessoa. Código deverá ser commitado no github até às 23:59h do dia 29/08/2014 Código Fonte: TCP e UDP Socket https://github.com/adrianoavelar/sockets
Diagrama da Aplicação Interface da Aplicação Cliente Aplicação Servidora 1. Crie Objeto sc; 2. Abre conexão 3. Envia dados Notifica Responde Notifica SocketClient SocketServidor (TCP ou UDP) (TCP ou UDP)