O documento discute comunicação entre processos e sockets em Java, descrevendo protocolos como TCP e UDP, além de apresentar exemplos de código para clientes e servidores unicast e multicast utilizando sockets. O WebSocket é introduzido como uma solução para comunicação bidirecional na web.
3. INTER-PROCESS COMMUNICATION (IPC)
O que é?
“[...] inter-process communication (IPC) is a set
of methods for the exchange of data among multiple
threads in one or more processes. Processes may be
running on one or more computers connected by a
network.” [3]
“IPC é um conjunto de métodos para troca de
informações entre múltiplas threads em um ou mais
processos. Processos podem estar executando em um
ou mais computadores conectados por um rede.”
(tradução livre)
23/07/2014
3
LucasCoutinhodeS.Oliveira
4. INTER-PROCESS COMMUNICATION (IPC)
É considerado, por muitos, o backbone da
computação distribuída;
Permite que processos separados comuniquem-se
entre si para executar um tarefa comum;
23/07/2014
4
LucasCoutinhodeS.Oliveira
6. INTER-PROCESS COMMUNICATION (IPC)
E, ainda podem ser classificadas como:
Unicast
O processo P1 troca dados com apenas um processo P;
23/07/2014
6
LucasCoutinhodeS.Oliveira
P1 P
7. INTER-PROCESS COMMUNICATION (IPC)
E, ainda podem ser classificadas como:
Multicast
O processo P1 troca dados, simultaneamente com vários
processos¹;
¹ Não são várias comunicações unicasts;
23/07/2014
7
LucasCoutinhodeS.Oliveira
P1
P2
P2
8. INTER-PROCESS COMMUNICATION (IPC)
Protocolos
São um conjunto de regras que precisam ser
respeitadas para que a comunicação aconteça;
23/07/2014
8
LucasCoutinhodeS.Oliveira
9. INTER-PROCESS COMMUNICATION (IPC)
Exemplos:
Pipes (nomeados e unidirecionais);
Fila de mensagens;
Memória compartilha;
RPC (Remote Procedure Call);
Socket;
23/07/2014
9
LucasCoutinhodeS.Oliveira
11. SOCKETS
Foram definidos originalmente no Berkeley Unix
4.x;
São um elo de comunicação, bidirecional, entre
dois processos em execução distribuídos em uma
rede.[6]
23/07/2014
11
LucasCoutinhodeS.Oliveira
12. SOCKETS
Endereçamento:
Endereço IP + Porta
Portas
É um identificador (16 bits) de buffer associado a um
processo;
65.536 portas possíveis;
23/07/2014
12
LucasCoutinhodeS.Oliveira
13. SOCKETS
Protocolos (Camada de transporte):
TCP (Transmission Control Protocol);
UDP (User Datagram Protocol);
23/07/2014
13
LucasCoutinhodeS.Oliveira
14. SOCKETS
Protocolos (Camada de transporte):
TCP (Transmission Control Protocol);
Orientado a conexão (3-way handshake);
Confiabilidade;
Full Duplex;
Entrega ordenada;
Controle de Fluxo;
23/07/2014
14
LucasCoutinhodeS.Oliveira
SYN
ACK
CLIENTE
SERVIDOR
15. SOCKETS
Protocolos (Camada de transporte):
UDP (User Datagram Protocol);
Não orientado a conexão;
Não confiável;
Multicast; ( 1 → N)
23/07/2014
15
LucasCoutinhodeS.Oliveira
17. SOCKETS EM JAVA
Introduzido no JDK 1.0 (1996)
Primeira versão lançada;
Desenvolvido pela Sun Microsystems;
Mantido pela Oracle Corporation (2010);
O pacote java.net fornece uma API para o uso de
sockets;
Fornece suporte a transmissão unicast e
multicast;
23/07/2014
17
LucasCoutinhodeS.Oliveira
18. SOCKETS EM JAVA
Unicast
Socket
API de cliente TCP;
Utilizada para se conectar a um servidor remoto;
Envia dados através de um stream;
ServerSocket
API de servidor TCP;
Utilizada para receber conexões de um host remoto
Recebe os dados através de um stream;
23/07/2014
18
LucasCoutinhodeS.Oliveira
19. SOCKETS EM JAVA
Servidor TCP (Exemplo de uso)
23/07/2014
19
LucasCoutinhodeS.Oliveira
20. SOCKETS EM JAVA
Cliente TCP (Exemplo de uso)
23/07/2014
20
LucasCoutinhodeS.Oliveira
21. SOCKETS EM JAVA
Unicast
DatagramSocket
API de cliente/servidor UDP;
Envia/Recebe dados através de pacotes de datagrama;
23/07/2014
21
LucasCoutinhodeS.Oliveira
22. SOCKETS EM JAVA
Servidor UDP (Exemplo de uso)
23/07/2014
22
LucasCoutinhodeS.Oliveira
23. SOCKETS EM JAVA
Cliente UDP (Exemplo de uso)
23/07/2014
23
LucasCoutinhodeS.Oliveira
24. SOCKETS EM JAVA
Unicast
DatagramSocket
API de cliente/servidor UDP;
Envia/Recebe dados através de pacotes de datagrama;
23/07/2014
24
LucasCoutinhodeS.Oliveira
26. SOCKETS EM JAVA
Multicast
Útil em aplicações groupware;
Ex: Vídeo Conferencia;
Utiliza o conceito de grupos, formados por diversos
processos (multicast group);
Cada processo no grupo pode enviar mensagem para
todos os outros;
23/07/2014
26
LucasCoutinhodeS.Oliveira
27. SOCKETS EM JAVA
Multicast
Faixa de endereços:
224.0.0.0 até 239.255.255.255
Reservas
224.0.0.0 Base Address (Reserved);
224.0.0.1 Todos os sistemas (rede IP multicast);
224.0.0.2 Todos os roteadores (rede IP multicast);
24/07/2014
27
LucasCoutinhodeS.Oliveira
28. SOCKETS EM JAVA
Multicast
A Multicast API suporta algumas operações
primitivas:
Join – Adiciona um processo, ou um grupo de processos, a
um grupo multicast;
Leave – Remove um processo do grupo;
Send – Envia mensagem para todos os processos de um
grupo;
Receive - Permite ao processo receber mensagens;
23/07/2014
28
LucasCoutinhodeS.Oliveira
29. SOCKETS EM JAVA
Multicast
Classes da Multicast API
InetAdress
DatagramPacket
DatagramSocket
MulticastSocket (estende DatagramSocket)
23/07/2014
29
LucasCoutinhodeS.Oliveira
30. SOCKETS EM JAVA
Receiver Multicast (Exemplo de uso)
23/07/2014
30
LucasCoutinhodeS.Oliveira
31. SOCKETS EM JAVA
Sender Multicast (Exemplo de uso)
23/07/2014
31
LucasCoutinhodeS.Oliveira
33. WEBSOCKET
Introdução:
Historicamente, a criação de aplicações web que
precisam de comunicação bidirecional entre cliente e
servidor tem exigido um abuso do HTTP efetuando
consultas, para manter as informações
constantemente atualizadas. (Por exemplo, chats e
aplicativos de jogos)
Esse abuso resulta em uma variedade de problemas.
São eles:
Necessidade de fazer Polling (sondagem) para manter
atualização;
Cada mensagem cliente-servidor possui um cabeçalho
HTTP, gerando um overhead;
Scripts (client-side) precisam manter mapeamento de
conexões de entrada e saída para acompanhar as respostas;
Etc..
23/07/2014
33
LucasCoutinhodeS.Oliveira
34. WEBSOCKET
Introdução
Uma solução simples, seria utilizar conexões TCP
bidirecionais;
E é exatamente isso que o Protocolo WebSocket
provê;
24/07/2014
34
LucasCoutinhodeS.Oliveira
36. WEBSOCKET
RFC6455
O protocolo WebSocket foi definido em Dezembro
2011;
Especificação foi produzida pela Internet Engineering
Task Force (IETF);
API WebSocket
Está sendo padronizada pelo World Wide Web
Consortium (W3C);
24/07/2014
36
LucasCoutinhodeS.Oliveira
40. WEBSOCKET
Java API for WebSocket (JSR 356)
Está presente no JavaEE 7.0
Consiste nos pacotes:
Javax.websocket.server
Contem annotations, classes e interfaces para criar e
configurar os servers endpoints;
Java.websocket
Contem annotations, classes, interfaces e exceptions
comuns a clientes e servidores;
24/07/2014
40
LucasCoutinhodeS.Oliveira
42. WEBSOCKET
Java API for WebSocket (JSR 356)
WebSocket Endpoint (Criação)
1. Criar a classe Endpoint;
2. Implementar o métodos do ciclo de vida do
endpoint;
3. Adicionar a lógica de negócios;
4. Deploy da aplicação web;
24/07/2014
42
LucasCoutinhodeS.Oliveira
43. WEBSOCKET
Java API for WebSocket (JSR 356)
WebSocket Endpoint (Ciclo de Vida)
24/07/2014
43
LucasCoutinhodeS.Oliveira
Annotation Evento
@OnOpen Inicio da conexão
@OnMessage Mensagem recebida
@OnErro Erro de conexão
@OnClose Término da conexão