Olá Luciano,
O protocolo http roda em cima do protocolo TCP, você provavelmente devera
escolher entre 2 protocolos:
TCP - Estabelece conexão, realiza o 3way handshake:
PC1 -------------->(SYN) PC2 (Primeiro pacote solicitando conexão)
PC2 ----->(SYN+ACK) PC1 (Segundo pacote confirmando o recebimento do
primeiro)
PC1 -------------->(ACK) PC2 (Terceiro pacote confirmando o recebimento do
segundo e estabelecendo a conexão)
UDP - Não estabelece conexão, não realiza o 3way handshake, por isso é
utilizado para funcionalidades como streeming.
Então é provável que você utilize o TCP, dessa forma você devera criar um
protocolo para trafegar suas informações, normalmente ele se divida em 2
partes:
header -> Informações gerais sobre o pacote/mensagem
payload -> Conteúdo do pacote/mensagem
Exemplo de header:
NOME_TRANSACAO(10POSICOES C/ " " A ESQUERDA)+TAMANHO_PAYLOAD(10POSICOES C/
0 A ESQUERDA)+PAYLOAD(VARIÁVEL)+HASH_PACOTE(64 POSIÇÕES)
Exemplo de payload:
NOME_INFORMACAO1(10POSIÇÕES C/ " " A
ESQUERDA)+TAMANHO_INFORMACAO1(10POSIÇÕES C/ 0 A
ESQUERDA)+INFORMACAO1(VARIÁVEL)
+NOME_INFORMACAO2(10POSIÇÕES C/ " " A
ESQUERDA)+TAMANHO_INFORMACAO2(10POSIÇÕES C/ 0 A
ESQUERDA)+INFORMACAO2(VARIÁVEL)
+NOME_INFORMACAO3(10POSIÇÕES C/ " " A
ESQUERDA)+TAMANHO_INFORMACAO3(10POSIÇÕES C/ 0 A
ESQUERDA)+INFORMACAO3(VARIÁVEL)
O seu pacote:
HEADER+PAYLOAD
Perceba que os campos do header são fixo e que o payload é variável. Como
você define o tamanho do payload e o tamanho de cada informação dentro do
payload, é possível realizar o parser da string tranquilamente.
Não sei qual sua necessidade, mas considere utilizar webservices, seja
rest, wsdl, ou mesmo JMS.
Depois de definido o layout do seu protocolo, virá a parte mais legal, que
é definir como o seu servidor irá processar essas mensagens.
Nesse ponto sugiro uma lida no livro Programação de rede Unix, Capitulo 30
-> Alternativas de projeto cliente/servidor, irei listar os tópicos, pois
sei que pode te ajudar.
30.4 - > Servidor TCP Interativo
30.5 -> Servidor TCP concorrente, um filho por cliente
30.6 -> Servidor TCP pré-bifurcado, sem bloqueio accept
30.7 -> Servidor TCP pré-bifurcado, bloqueio de arquivo em torno de accept
30.8 -> Servidor TCP pré-bifurcado, bloqueio de thread em torno de accept
30.9 -> Servidor TCP pré-bifurcado, passagem de descritor
30.10 -> Servidor TCP concorrente, um thread por cliente
30.11 -> Servidor TCP pré-threaded, um accept por thread
30.12 -> Servidor TCP pré-threaded, thread principal chama accept
Acima temos exemplos da utilização de forks e threads, no seu caso,
provável que utilize threads e definir como funcionara suas threads/pool de
threads será crucial para a escalabilidade da sua aplicação. Sugiro que
você abstraia a linguagem e se concentre nos conceitos... dessa forma você
irá conseguir desenvolver algo bacana.
O Java - Como programar do Deitel possui exemplos simples de como trabalhar
com sockets/threads, legal para fazer e ver funcionando, mas sinceramente
deixa a desejar e por isso recomendei o Programação de rede Unix como
literatura auxiliar.
Na mesma linha, você pode pesquisar sobre JAVA NIO(caso você possua *muitas
transações* concorrentes) e também se preocupar com a criptografia dos
pacotes... seja ela feita na camada de apresentação ssl/tls ou a nível de
aplicação, seja simétrica ou assimétrica.
Boa sorte! Inveja alheia... queria estar com um problema desses nas mãos
\o/.
[]s
--
Att, Marcelo M. Fleury
Blog - http://marcelomf.blogspot.com/
Slides - http://www.slideshare.net/marcelomf/
"O primeiro dever da inteligência é desconfiar dela mesma." By Einstein
[As partes desta mensagem que não continham texto foram removidas]
Para upload/download de arquivos: http://www.yahoogroups.com/files/java-br
0 comentários:
Postar um comentário