Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

KarlMTC

SocketServer multiusuario sem threads?

Mensagens Recomendadas

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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.