Fala Serjão!!
Pois é rapaz, eu simplesmente não consigo ficar parado diante de uma necessidade que tenho e que não encontro uma solução pronta! hehehe Isso gerou alguns projetinhos bacanas que tenho no meu site http://sparrow.webhop.net. Todos eles surgiram de uma necessidade sem solução! 
Seu post foi muito apreciado por causa das sugestões como o uso de New IO e de criptografia. Com certeza esses são poontos que serãm levados em contas a medida em que o projeto amadurecer. Acabando a versão 1.0, estarei colocando ele aqui na rede pra funcionar e ver como ele se comporta. Estou meio apreensivo, pois todo o esquema de comunicação client/server é baseado em TCP, nadinha usando UDP!!
Essa foi uma decisão tomada depois de muita reflexão! Espero não me arrepender depois… heheheh
De qualquer maneira, pelos testes iniciais, a comunicação client <-> server <-> client ficou muito boa. Já consigo enviar mensagens entre usuários e atualizar o status na lista de contatos. Vamos ver depois de algumas centenas de usuários “pendurados” no servidor… heheheh
Quanto às suas duas perguntas, não houve (pelo menos ainda) uma coisa chata no projeto. Pensei em fazer uma GUI para o server, mas acho que isso será meio chato de fazer, por isso o server vai ser baseado em console por enquanto. O Client tudo bem! Não sou lá um grande designer de interfaces, mas ficou bem legal!
Bom, talvez a coisa mais dificil de fazer foi a parte de comunicação entre hosts. Não diria que foi dificil, mas foi a que eu mais precisei “refletir”. Foi uma das mais interessantes também. Montei um “pool” de conexões em memoria, que refletem o conteudo da tabela ONLINE_USERS, pra servir como ponte de comunicação de usuários no servidor. Essa foi a parte mais legal do projeto. Vocês entenderão melhor como ela funciona depois que os fontes forem liberados. Outra coisa é que toda a comunicação é totalmente assincrona, ou seja, quando vc manda uma informação para o servidor, não necessariamente vc tem que esperar um retorno.
Como já disse em posts anteriores, esse é o meu primeiro grande projeto em Java, sou um newbie na linguagem e o processo de construção do software está sendo muito divertido. A cada rotina implementada, me apaixono cada vez mais pela linguagem!
A facilidade que ela te dá pra fazer aplicações para internet é uma coisa de louco!!
Agora uma coisa que estou tendo dificuldades e que gostaria de melhorar, com algumas idéias. Tenho algumas classes que são compostas por outras classes. Exemplo: A classe ContactsList é composta de vários ContactListItem (os contatos). Cada ContactListItem possui um MessageWindow que é a frame onde todo o diálogo do contato é mantido. Entretanto, essa última classe MessageWindow precisa utilizar uma classe externa chamada ServerConnection. Pra isso funcionar, fui replicando uma referencia para um ServerConnection desde o ContactsList até chegar no MessageWindow, passando pelo ContactListItem. Essa replicação foi feita via construtores da classe, onde fui informando as referencias.
Gostaria de saber se existe uma maneira mais direta de acessar uma classe externa, como a ServerConnection do exemplo acima sem ir replicando uma referencia. Se existir um meio, gostaria que me sugerissem, pois estou achando que isso está “enfeiando” o meu codigo.
Bom. Se não ficou muito claro o que eu expus aqui, ficará mais claro no momento da release. De qualquer forma, obrigado pelas sugestões!
Grande Abraço!
Bootsector
“saoj”:
Fala bootsector !!!
Também adoro essa metodologia do faça vc mesmo! hehehe
Eu trabalho com Client/Server há um bom tempo. Aqui no ParPerfeito a gente tem um servidor Java Nio que aguenta mais de 7000 conexões simultâneas. O anterior que era Socket <-> Thread aguentava no máximo 3000 conexões, isso depois de um milhão de otimizações no desespero!
Tenho um IM para websites que é interessante tb. Veja em:
http://www.smartjava.com.br/sitetalk/
Seria legal tb vc colocar um esquema de criptografia RSA (chave pública + chave privada). Já pensou nisso ???
Quanto a abrir isso Open-Source eu sou o cara errado para dar opiniões, pois não gosto de trabalhar dias, meses e anos numa coisa e depois abri-la para os outros copiarem. Mas respeito e admiro quem assim o faz.
Parabéns pela iniciativa e pelo resultado! Se possível gostaria de testá-lo!
O que foi o mais difícil de fazer na sua opinião ???
O que foi o mais chato de fazer na sua opinião ???
Um abraço,
Sergio Oliveira
http://www.smartjava.com.br/
:shock: :shock: