Múltiplas conexões utilizando Sockets

Olá galera,

eu tenho implementado um servidor que consegue receber várias conexões, isto é, quando uma aplicação conecta ao servidor, é adicionado o socket desta respectiva aplicação em uma Lista de Sockets. Quando eu quero enviar mensagens para todos os clientes (aplicações) conectadas, basta iterar sobre esta Lista de Sockets.

Só que agora tem um problema: se o número de clientes crescer muito? A Lista de Sockets está armazenada em memória RAM, que é limitada!

Preciso de algo que suporte múltiplas conexões (milhares ou milhões) de sockets, que controle múltiplos acessos e que, também, seja fácil enviar mensagens às aplicações conectadas e/ou que estão esperando alguma conexão.

Como posso resolver esse problema?

Obrigado.

Serializando? Banco de dados?

Se for para tratar até uns 500-100 clientes pode ser aberto 1 thread para cada cliente conectado ao sistema.
Caso precise de mais clientes conectado ao servidor, é necessário implementar o NIO http://docs.oracle.com/javase/1.4.2/docs/api/java/nio/channels/SocketChannel.html
que nada mais é que um acesso a socket e server Socket assíncrono(não bloqueante)

[quote=andrecosta90]Olá galera,

eu tenho implementado um servidor que consegue receber várias conexões, isto é, quando uma aplicação conecta ao servidor, é adicionado o socket desta respectiva aplicação em uma Lista de Sockets. Quando eu quero enviar mensagens para todos os clientes (aplicações) conectadas, basta iterar sobre esta Lista de Sockets.

Só que agora tem um problema: se o número de clientes crescer muito? A Lista de Sockets está armazenada em memória RAM, que é limitada!

Preciso de algo que suporte múltiplas conexões (milhares ou milhões) de sockets, que controle múltiplos acessos e que, também, seja fácil enviar mensagens às aplicações conectadas e/ou que estão esperando alguma conexão.

Como posso resolver esse problema?

Obrigado.[/quote]

O número de sockets que podem ser abertos em uma determinada porta é limitado pelo protocolo TCP, e esse número máximo teórico é 65536. Cuidado com esse número de “milhões” - ninguém abre “milhões” de sockets em um único computador.

Você quer criar um MSN Messenger, é isso? Você provavelmente terá de usar algo como o Apache Mina ( http://mina.apache.org/ ) , que casualmente já vem com uma implementação do protocol XMPP, que é usado para messaging - http://xmpp.org/xmpp-protocols/

[quote=entanglement][quote=andrecosta90]Olá galera,

eu tenho implementado um servidor que consegue receber várias conexões, isto é, quando uma aplicação conecta ao servidor, é adicionado o socket desta respectiva aplicação em uma Lista de Sockets. Quando eu quero enviar mensagens para todos os clientes (aplicações) conectadas, basta iterar sobre esta Lista de Sockets.

Só que agora tem um problema: se o número de clientes crescer muito? A Lista de Sockets está armazenada em memória RAM, que é limitada!

Preciso de algo que suporte múltiplas conexões (milhares ou milhões) de sockets, que controle múltiplos acessos e que, também, seja fácil enviar mensagens às aplicações conectadas e/ou que estão esperando alguma conexão.

Como posso resolver esse problema?

Obrigado.[/quote]

O número de sockets que podem ser abertos em uma determinada porta é limitado pelo protocolo TCP, e esse número máximo teórico é 65536. Cuidado com esse número de “milhões” - ninguém abre “milhões” de sockets em um único computador.

Você quer criar um MSN Messenger, é isso? Você provavelmente terá de usar algo como o Apache Mina ( http://mina.apache.org/ ) , que casualmente já vem com uma implementação do protocol XMPP, que é usado para messaging - http://xmpp.org/xmpp-protocols/
[/quote]

entanglement, apache mina é um framework que utiliza o NIO ^^
pode ler na documentação, trabalho com programas de mensageria aqui na empresa.