Sockets :o

Olá pessoal, ate ontem nem sabia o que era sockets olhei um tutorial aqui do Guj http://www.guj.com.br/articles/126, aprendi fiz uso em uma aplicação que desenvolvi, nessa aplicação fiz o contato do cliente ao servidores, porem não sei como faço o inverso :S
alguém poderia sugerir um lugar aonde fala sobre isso, ou postar umas linhas do código que faça isso pra me intender.

vlw ae Galera

O servidor não conecta ao cliente.

O ServerSocket fica escutando em uma porta quando um Socket(cliente) se conecta a ele, ele gera uma nova instancia de um Socket(cliente) e mantém a comunicação através dele.

Dessa forma o ServerSocket apenas aceita os clientes, mas a conversa fica como se o servidor fosse um cliente.

Me expressei bem?

Intão, no exemplo que segui ambos os tem sockets, ae ele conversa, mas como eu iria mandar uma msg do servidor para o cliente ou n teria como? ou eu teria q usar outro recurso de programação?

No server socket não existe um método read? Existe um write também.

No server socket não existe um método read? Existe um write também.[/quote]

no exemplo que aprendi n usei nenhum metodo read do server socket

para o socket receber um informação ;p

usei entrada = new BufferedReader(new InputStreamReader(s.getInputStream()));

como procederia com a saida?

O socket também tem um outputStream. Você pode usa-lo para comunicar de volta do servidor para o cliente.

tentei tentei e n consegui :frowning:

Galera!
Aproveitando o topico sobre socket, estou com a seguinte duvida, quantas conexoes o ServerSocket suporta?
Sei que depende do sistema operacional, minha aplicação vai rodar em Linux.
O meu codigo abaixo esta suportando somente + ou - 450 conexoes, passando disso da timeout do lado do cliente.


ExecutorService executor = Executors.newFixedThreadPool(5000);
ServerSocket serverSocket = new ServerSocket(751);
while (true) {
                Socket socket = serverSocket.accept();
                Logger.logInfo(">> Mais um equipamento atendido.");
                try {
                    ServidorSocket servidorSocket = new ServidorSocket(socket);
                    executor.execute(servidorSocket);
                } catch (Exception e) {
                    Logger.logError("Principal-main", e);
                } catch (Throwable t) {
                    Logger.logError("Principal-main", t);
                }
            }

Preciso conectar mais de 8000 equipamentos!!!
Oh sistema que esta dando dor de cabeça!!!

Att

você configurou o sysctl.conf?

Não!

Nem sabia que tinha que configurar isso.

:lol:

Att

O linux tem uma restrição sobre o número de processos abertos, uma vez tive um problema com isso.
Quando eu iniciava um processamento que fazia muitas conexões com outro hardware o jboss sofria um crash e escrevia um log informando “muitos arquivos abertos”
e dizia que o erro acontenceu fora da jvm.

A solução foi configurar este arquivo.

Eu encontrei está solução aqui.

http://www.thiagovespa.com.br/blog/2011/01/19/muitos-arquivos-abertos/

[quote=luciano@@]O linux tem uma restrição sobre o número de processos abertos, uma vez tive um problema com isso.
Quando eu iniciava um processamento que fazia muitas conexões com outro hardware o jboss sofria um crash e escrevia um log informando “muitos arquivos abertos”
e dizia que o erro acontenceu fora da jvm.

A solução foi configurar este arquivo.

Eu encontrei está solução aqui.

http://www.thiagovespa.com.br/blog/2011/01/19/muitos-arquivos-abertos/

Fio!!! Foi batata, estava aceitando exatos 960 conexoes. mudei e agora é correr para o abraço.

valeu pela força.

Outra coisa que ajudou foi as ampolas de 350ml, faz a gente pensar melhor!!!

Att

huahauhauhauh é melhor a de 1 litro.

[quote=vcsmetallica][quote=luciano@@]O linux tem uma restrição sobre o número de processos abertos, uma vez tive um problema com isso.
Quando eu iniciava um processamento que fazia muitas conexões com outro hardware o jboss sofria um crash e escrevia um log informando “muitos arquivos abertos”
e dizia que o erro acontenceu fora da jvm.

A solução foi configurar este arquivo.

Eu encontrei está solução aqui.

http://www.thiagovespa.com.br/blog/2011/01/19/muitos-arquivos-abertos/

Fio!!! Foi batata, estava aceitando exatos 960 conexoes. mudei e agora é correr para o abraço.

valeu pela força.

Outra coisa que ajudou foi as ampolas de 350ml, faz a gente pensar melhor!!!

Att[/quote]

Entao, o efeito das apolas acabaram e veio a dor de cabeça!!!
Nao sei pq agora esta aceitando somente 4190 conexoes.
Mudei o arquivo solicitado para 20000
Do lado cliente esta retornado

java.net.ConnectException: Connection timed out: connect

Mas a aplicação do lado servidor não caiu e nem lancou nenhuma excessão.

Vou ter que beber mais ampolas!!!

Att

Agora estou tão perdido quanto você. Vê se isso não é limitação da JVM, talvez precise configurar alguma coisa.

entao, coloquei a memoria com inicio de 512 e final de 1024.
Estou usando Debian, so que estou usando o debian em uma maquina virtual em cima do windows 2003. Nao sei se tem alguma coisa a ver.
Tenho uma maquina bem simples também com o debian, consegui mais de 14 mil conexoes, so nao fui alem pq o cooler estava ruim e fiquei com medo de queimar a maquina.

valeu

Att

Cara tem que monitorar a memoria do seu debian pra ver se seu sistema está realmente utilizando toda esta memória.

Se você quiser suportar um número realmente agressivo de conexões, use as classes de conexão do pacote java.nio.
Através de Selectors, você conseguirá reduzir o número de threads do servidor, ao mesmo tempo reduzindo carga de processamento e footprint de memória.

Dê uma lida:

[quote=luciano@@]Cara tem que monitorar a memoria do seu debian pra ver se seu sistema está realmente utilizando toda esta memória.

[/quote]

Ja estou fazendo isso.

[quote=ViniGodoy]Se você quiser suportar um número realmente agressivo de conexões, use as classes de conexão do pacote java.nio.
Através de Selectors, você conseguirá reduzir o número de threads do servidor, ao mesmo tempo reduzindo carga de processamento e footprint de memória.

Dê uma lida:
http://tutorials.jenkov.com/java-nio/selectors.html[/quote]

Oh “rapaiz” vou dar uma estudada nisso. vai que da certo na minha aplicação. Valeu