Server e Client de Instant Messaging. Interessa?

20 respostas
B

Olá Pessoal!

Trabalho numa empresa que possui mais de 300 usuários conectados em rede. Procurei na internet um servidor e um client de Mensagens Instantâneas para implantar na rede interna (uso privado) mas não achei nenhum que fosse escrito em Java e fosse fácil de usar e configurar.

Foi então que eu parti para o “faça-você-mesmo”. Criei um servidor que utiliza banco de dados FireBird para armazenamento dos dados de usuários e das listas de contato, que é baixada automaticamente quando o usuário efetua login no servidor. Como a maioria dos programas de IM, o sistema informa o estado do usuário, inicialmente podendo ser apenas dois: online e offline.

O projeto já está em estágio final de desenvolvimento e estou pensando em torná-lo Open Source no SourceForge, mas isso apenas se houver algum interesse por parte de usuários e/ou desenvolvedores.

Caso alguem tenha interesse em ver tal projeto liberado como OpenSource para a comunidade, postem aqui a sua opinião. Caso vc ache que tal projeto não tem futuro, poste aqui a sua mensagem também, gostaria de ouvir todo tipo de sugestão!

Até mais!!

bootsector

20 Respostas

chaos

Bom dia!

Eu acho que realmente vale a pena você colocar no sourceforge.

Já cheguei a procurar algo nesse tipo, mas não desenvolvi nada porque a prioridade não era essa no momento… :frowning:

Mas se for por interesse:

usuários++;

desenvolvedores++;

Faloha

Rafael_Nunes

Eu queria dar uma olhada nele sim, acho até interessante torná-lo open source.
E têm outros feitos sim, ha algum tempo atrás eu andei pesquisando sobre isso, tem o Jabber, e mais alguns que não me lembro no momento.

Rafael

louds

Voce chegou a procurar sobre jabber? Que eu saiba existem tanto cliente, servidor e bibliotecas em java…

jcranky

Porque não colocar no java.net ao invés do SourceForge?

B

Boa sugestão gangrel!

Bom, andei dando uma olhada no Jabber e realmente parece ser um projeto muito bom. Como este foi o meu “Primeiro Grande Projeto em Java”, que envolveu de GUI até acesso a banco de dados, passando por sockets e multithreading e sendo esse um projeto pessoal e desenvolvido mais por aprendizado (inclusive o protocolo de comunicação desenvolvido por mim), não sei se é viável registra-lo no Java.net ou no SF. Porém, assim que o mesmo estiver com a versão 1.0 pronta (hoje eu já consigo registrar novos usuários, obter o status de conexão de cada um e enviar mensagens instantâneas, faltando pouco pra ficar pronto) estarei liberando ele sob a GPL e colocando os fontes a disposição no meu site. Recomendo a todos darem uma olhada nele, pois tem muita coisa interessante nele!

Assim que eu liberar a versão 1.0 no meu site, postarei aqui. Dessa forma ficarei aguardando sugestão e contribuições para o projeto!

Obrigado a todos!

Bootsector

pcalcado

apesar de não conhecer tããão bem o Jabber [alguém aí tem conta além do cv, louds e eu?], acho qeu seria bem legal se você tentasse trabalhar em cima de algo conhecido. É uma bosta ter que usar 20 IMs ao mesmo tempo porque sua namorada só gosta do M$N, você prefere o ICQ, sua mão usa aquele troço do Yahoo!.. um desperdício memorável de recursos…

Nãoe stou querendo jogar areia no seu projeto, mas acho que o caminh nos IMs é um protocolo único e implementações de clientes, e bem p2p.

[]s

_fs

Legal cara :smiley: se o software for bom mesmo vou usá-los em outros projetos meus ;D

B

Olá Phillip,

A idéia de desenvolver um IM proprio foi exatamente a NÃO INTEGRAÇÃO com outros protocolos. O que eu queria é, na verdade, um IM privado, particular, próprio para redes internas de empresas (ou até mesmo a internet), e que não se integrasse com nenhum protocolo público.

Acredito que muita gente, assim como eu, já pensou em ter um servidor proprio de IM dentro da empresa e que o mesmo só estivesse disponivel apenas para os usuários internos, e não para o mundo inteiro. É essa a idéia do projeto.

[]s

Bootsector

“pcalcado”:
apesar de não conhecer tããão bem o Jabber [alguém aí tem conta além do cv, louds e eu?], acho qeu seria bem legal se você tentasse trabalhar em cima de algo conhecido. É uma bosta ter que usar 20 IMs ao mesmo tempo porque sua namorada só gosta do M$N, você prefere o ICQ, sua mão usa aquele troço do Yahoo!.. um desperdício memorável de recursos…

Nãoe stou querendo jogar areia no seu projeto, mas acho que o caminh nos IMs é um protocolo único e implementações de clientes, e bem p2p.

[]s

pcalcado

“bootsector”:
Olá Phillip,

A idéia de desenvolver um IM proprio foi exatamente a NÃO INTEGRAÇÃO com outros protocolos. O que eu queria é, na verdade, um IM privado, particular, próprio para redes internas de empresas (ou até mesmo a internet), e que não se integrasse com nenhum protocolo público.

Oi,

O jabber e até o M$N fazem isso. Existem configurações para servidores particulares :wink:

[]s

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/

B

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! :slight_smile:

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!! :slight_smile: 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! :slight_smile: 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:

saoj

Fala BootSector,

Quando eu fiz meu primeiro servidor Java, a coisa ficou tosca. Tinha arquivo texto para cadastrar os usuários, tinha um OO péssimo, algumas race conditions, etc. Mas me lembro que mesmo assim eu tinha muito orgulho dele. :smiley:

É claro que depois de alguns anos eu vi que eu estava viajando em alguns pontos, e fui melhorando a coisa. Hoje tenho uma solução genérica para um servidor Java que atende a qualquer tipo de aplicação client/server.

Vou dar os meus pitacos mas faça do jeito que vc achar melhor, pois o processo de aprendizado só se dá assim.

No meu servidor, eu guardo a lista de usuários Online em memória e não no banco. Só uso o banco quando eu preciso cadastrar um usuário com login e senha. O banco deve ser desnecessário para qualquer tipo de comunicação client->server.

Cachorro possui Boca por composition. Passar a referencia do cachorro para dentro da boca, de forma que a boca possa responder: “De quem eu sou boca?” as vezes é necessário mesmo.

Uma idéia rápida:

Server contém lista de Users
User contém socket
Users extends Thread que ficam escutando os sockets.

Server faz broadcast para todos os users
Server pode enviar para um user em especial

Mais uma vez parabéns pelo projeto!

Sergio Oliveira
http://www.smartjava.com.br/

B

Olá Pessoal!!

Finalmente terminei a versão 1.0 do IM Café!! Ainda não tive muito tempo pra fazer testes pesados, com muitas conexões. Por isso estou contando com a ajuda de toda a comunidade para envio de sugestões e bug reports.

Vocês podem baixar o pacote completo (Binários e Fontes!! :slight_smile: no meu site. O link direto para a área do IM Café é:

http://nic-nac-project.de/~sparrow/phpBB2/viewforum.php?f=12

O IM Café é Free Software, OpenSource e conta com o apoio da comunidade para crescer!!

Obrigado a todos!

Bootsector

cv1

GPL? :cry:

B

Não entendi? Qual seria a sua sugestão?

GPL? :cry:

cv1

A GPL traz alguns problemas ao codigo Java - basicamente, a GPL contamina codigo Java muito mais do que o codigo em C, pq vc nao pode nem sequer carregar um JAR na mesma VM sem infringir a danada. Tem explicacoes melhores por ai na net, uma boa googlada deve resolver, mas basicamente: GPL e Java nao combinam. Uma sugestao, caso vc queira manter o espirito da coisa, eh mudar para LGPL, ou ainda se vc quiser que seu software seja verdadeiramente livre (e sem nenhum efeito viral), use BSD-like ou Apache-like :wink:

Muuuuuito mais informacoes aqui: www.opensource.org

B

Obrigado pela informação! É o costume da convivência no mundo Linux!

Bom. Retirei o download temporariamente do ar até eu resolver esta questão.

Obrigado pelo toque!

Bootsector

“cv”:
A GPL traz alguns problemas ao codigo Java - basicamente, a GPL contamina codigo Java muito mais do que o codigo em C, pq vc nao pode nem sequer carregar um JAR na mesma VM sem infringir a danada. Tem explicacoes melhores por ai na net, uma boa googlada deve resolver, mas basicamente: GPL e Java nao combinam. Uma sugestao, caso vc queira manter o espirito da coisa, eh mudar para LGPL, ou ainda se vc quiser que seu software seja verdadeiramente livre (e sem nenhum efeito viral), use BSD-like ou Apache-like :wink:

Muuuuuito mais informacoes aqui: www.opensource.org

B

De acordo com http://www.java.net/choose_license.html:

“Does your project currently use any open source code? If so, then you may need to use the same license that the open source code uses, or another license that is compatible with it.”

Como IM Café utiliza e possui embutido o driver JDBC para o FireBird (http://jaybirdwiki.firebirdsql.org/JayBird/JayBirdSourceCode), que é baseado na LGPL, estarei mudando a licença para BSD-new, que de acordo com o que encontrei na Internet é compatível com a LGPL.

Estarei efetuando a alteração da licença e o numero de release. Uma nova liberação estará disponivel em breve.

[]s

Bootsector

B

Tá no ar novamente! :smiley:

http://nic-nac-project.de/~sparrow/phpBB2/viewforum.php?f=12

IM Café - A Java Based Instant Messaging System v1.0
©08/2004 - Bruno Freitas
[email removido]
This software is released under MIT License.
See COPYING file for further informations!

[]s

Bootsector

B

Olá Pessoal!!!

Release nova do IMCafé (1.0c), agora com sons e mais algumas melhorias (vide página do SourceForge)!! :smiley:

Home Page:
http://nic-nac-project.de/~sparrow/phpBB2/viewtopic.php?t=21

Página no SF:

[]s

Bootsector

Criado 24 de agosto de 2004
Ultima resposta 29 de ago. de 2004
Respostas 20
Participantes 9