Servidor Multithreaded

6 respostas
H

Pessoal, to lendo o capítulo sobre redes do livro do Deitel, um exercício propôs q eu criasse um servidor q usa conexôes UDP, onde o servidor poderia aceitar conexões de mais de um servidor. To tentando fazer isso com pacotes TCP. Eu criei uma classe que extende Thread, nessa classe devo criar objetos SererSocket ou Socket, ou ambos? Cada solicitaçao de conexao por parte dos clientes criam um SererSocket ou Socket?
Valew!!!

H3SIL

6 Respostas

J

Olá…

Pelo que eu entendi você quer um servidor multithread… Bom, o que você pode fazer é abrir um único ServerSocket e fazer algo assim:

// Cria o serversocket (1 só na aplicaçã)
ServerSocket ss = new ServerSocket(1234);// Não lembro se estou fazendo corretamente
while (true) {
    // Para cada cliente aceito, pega o socket e joga numa thread para que os eventos DESSE CLIENTE sejam tratados
    Socket s = ss.accept();
    new SuaThreadParaOCliente(s).start();
}

Acho que isso resolve o seu problema…

Espero ter ajudado…
Abraços

S

Toda vez que você chama o método accept() (ServerSocket), sua aplicação é bloqueada, pois fica “escutando” na porta que você definiu no método construtor.

E lá está ela… escutando… de repente alguém quer conversar com ela (hahaha), um cliente qualquer… assim que a chamada é “ouvida” por nosso ServerSocket (no caso o cliente é uma instância de Socket), nossa aplicação cria um objeto Socket para conversar com o cliente que fez a chamada…
O ServerSocket fica livre para outra chamada na mesma porta, enquanto que o Socket criado pelo nosso ServerSocket atende a requisição do cliente (um outro Socket) em uma outra porta! Uhuuuuuuuuuuuu…

AMMMMMMMMMBOS… =)
Você vai precisar de 1 ServerSocket, o qual ficará escutando na porta que você definiu… e de muiiiiiiiiiiiitos Sockets… depende daí de quantas conexões simultâneas você quer que seu servidor gerencie…

Eu fiz uns monstrinhos aqui, mas agora tenho que Fuuugir pra casa… mais tarde eu posto pra você.

Abraço… boa sorte! =)

H

Vou criar um único ServerSocket, e um Socket pra cada cliente, assim passo esse Socket para a Thread que fará o oscalonamento de acordo com as requisições de cada cliente.

Valew.
H3SIL

S

Isssssssssssssoooooooooooo… =)

Daí, pra ficar mais “xuxu-beleza” você cria uma uma Thread para tratar as requisições (stream de entrada)de um Socket… enquanto ela também recebe os streams de saída.

Estou enxugando o código que fiz, assim que estiver clean eu posto aqui!

Ah… faça um teste depois… tente abrir mais de 1017 conexões entre os sockets… começa a dar pau…
E agora!? =(

C

Pra resolver os problemas de escalabilidade e desempenho do java.io foi criado o java.nio.
Dá uma olhada nas classes SocketChannel e ServerSocketChannel :wink:

Falow!

S

uhuuuuuuuuuu… muito booooooooooooom! =)

encontrei mais informações aki:

http://www.guj.com.br/java.article.get.print.chain?article.id=118

valew Cloviziskivz! =)

Criado 7 de julho de 2005
Ultima resposta 8 de jul. de 2005
Respostas 6
Participantes 4