Comunicação Inter-Processos API PARA PROTOCOLOS INTERNET COMUNICAÇÃO CLIENTE-SERVIDOR COMUNICAÇÃO DE GRUPO Dois Padrões de Comunicação Protocolos para suportar os dois padrões de comunicação, mais comumente usados em sistemas distribuídos: Comunicação Cliente-Servidor Comunicação de Grupo Cliente-Servidor Mensagens request-reply proporcionam a base para chamada de procedimento remoto (RPC) e invocação de métodos remotos (RMI) . Uma mesma mensagem é enviada para diversos processos. Implementação 1. UDP Datagram Communication (User Datagram Protocol) 2. TCP Stream Communication (Transmission Control Protocol) 3. IP Multicast (implementação de comunicação de grupo) Comunicação A comunicação entre processos remetente- destino pode ser: Síncrona: processos são sincronizados a cada mensagem. Execução de Rendez-Vouz (o primeiro que chega, espera pelo outro). Assíncrona: a operação send é não bloqueante, no sentido que o processo-remetente pode prosseguir assim que a mensagem tenha sido copiada para um buffer local e a transmissão da mensagem ocorre em paralelo com processo remetente. Sockets Ambas as formas de comunicação (UDP, TCP) usam socket, o qual provê um ponto final para a comunicação entre processos. A comunicação consiste em transmitir uma mensagem entre um socket de um processo e um socket em outro. Socket Um par ( IP, porta ). As mensagens enviadas a um endereço IP e a uma porta, só podem ser recebidas por um processo cujo socket esteja associado a esse IP e a esse número de porta. Comunicação TPC Stream A comunicação consiste num fluxo de bytes, no qual dados podem ser lidos (receive) e escritos (send). Estabelecimento de conexão. Controle de Fluxo: a velocidade dos processos é combinada. Comunicação TCP Stream (Fluxo) Bloqueio: Os dados gravados em um fluxo são mantidos em uma fila no socket de destino. Quando o receptor tenta ler, obterá dados ou será bloqueado até que dados existam para ser lidos. Threads: Quando um servidor aceita uma conexão, ele cria uma nova thread para se comunicar com o novo cliente. Comunicação de Grupo A troca de mensagens aos pares não é a melhor forma de comunicação de um processo com um grupo de outros processos. Neste caso, o uso de difusão seletiva (multicast) é mais apropriado. Comunicação de Grupo Trata-se de uma operação que permite o envio uma única mensagem para cada um dos membros de um grupo de processos, de forma que os membros do grupo ficam totalmente transparentes (parece não existir, mas existe) para o remetente. Comunicação de Grupo Uso Comum: Propagação da notificação de evento. Ou seja, um remetente notifica os processos de um grupo quando algo acontece. Implementação: IP Multicast Permite que o remetente transmita um único datagrama IP para um conjunto de computadores que formam um grupo de multicast. Comunicação de Grupo O remetente não conhece a identidade dos destinatários individuais e nem o tamanho do grupo. Um grupo multicast é identificado por um endereço IP classe D, ou seja, um endereço cujos primeiros 4 bits é 1110 ( E em Hexadecimal) em IPv4. Comunicação de Grupo 4 28 Multicast Address Classe D (Multicast): 224 à 239 no octeto 1 0 à 255 no octeto 2 e 3 1 à 254 no octeto 4 224.0.0.0 à 239.255.255.25 Os datagramas IP são enviados a computadores – as portas pertencem aos níveis TCP e UDP. Para a programação de aplicativos, o Multicast IP está disponível por meio de UDP. Comunicação de Grupo API Java MulticastPeer (classe) MulticastSocket subclasse de DatagramSocket InetAddress joinGroup(group) DatagramPacket send(messageOut) receive(messageIn) leaveGroup(group) SocketException IOException