Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

KarlMTC

SocketServer multiusuario sem threads?

Recommended Posts

KarlMTC

Estou a tentar fazer um jogo de cartas para 4 pessoas. Consta de um servidor onde se executa tudo e é ouvinte de varios sockets que lhe mandam a informaçao (carta jogada, pontos apostados, etc). Por agora consegui fazer o servidor ouvir sem threads os cuatro sockets, mas apenas de maneira sequencial (o primeiro em ligar ao servidor é o primeiro a enviar a informaçao). Sabem se ha alguma maneira de manipular os sockets sem o uso de threads?

Share this post


Link to post
Share on other sites
Knitter

Se apenas uma thread está a processar os pedidos, será sempre de forma sequencial, se queres processamento em paralelo, então terás de usar os mecanismos de processamento paralelo que, no caso de Java, são as threads.

Share this post


Link to post
Share on other sites
fnds

Podes fazer assim:

listen(4)

jogador 1 = accept()

jogador 2 = accept()

jogador 3 = accept()

jogador 4 = accept()

while xxx

  jogada do jogador 1 = obtemjogada(jogador 1)

  jogada do jogador 2 = obtemjogada(jogador 2)

  jogada do jogador 1 = obtemjogada(jogador 3)

  jogada do jogador 2 = obtemjogada(jogador 4)

Edit: comecei a escrever antes do Knitter responder.

Isto é uma pseudo-linguagem qualquer :)

Share this post


Link to post
Share on other sites
Knitter

Isso continua a ser de forma sequencial, e novamente, o primeiro socket vai sempre processar a informação antes do segundo, o que pode dar problemas se precisares da informação do segundo, a não ser que leias tudo primeiro e só no fim processes a informação recebida... mas qual é o problema de usar threads?

Share this post


Link to post
Share on other sites
fnds

Eu não disse que deixava de ser de forma sequencial, só apresentei uma solução para o problema.

Também não percebo porque não usar threads, não é nada de muito complexo de usar.

Share this post


Link to post
Share on other sites
magician

Só se for com a API NIO que já permite que os sockets funcionem de forma assíncrona, mas mesmo assim não sei até que ponto a performance melhore ou piore face ao sistema em paralelo.

Em todo o caso mesmo com o NIO acho que terás de recorrer ao processamento em paralelo para obter o que pretendes.


I haven’t lost my mind; it’s backed up on DVD somewhere!

Share this post


Link to post
Share on other sites
KarlMTC

A verdade é que o problema nao é nenhum... Deu-me na telha tentar fazer sem threads porque nao achei necessidade, mas acho que nao vai valer a pena. Até é capaz de dar, porque ao ser sempre um jogador a jogar detrás de outro (de maneira sequencial) até podia ser uma soluçao, mas nao sei se vai valer a pena. Depois à hora de rotar os jogadores, etc, é mais facil com threads....

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.