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.
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.
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?
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!!!
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.
[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.
[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.
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
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.
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.
[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.