Qual mecanismo / biblioteca / sistema de rede usar em um jogo .NET baseado em turnos? [fechadas]


7

Estou desenvolvendo um jogo abstrato baseado em turnos de estratégia em C #.

Sendo assim, alta carga de rede não é esperada. Os jogadores nem precisam estar conectados o tempo todo. O anfitrião pode esperar o jogador atual se conectar e fazer a sua jogada. Sei que poderia criar um site para executar isso, mas quero que alguém possa hospedar seus próprios jogos.

Preciso de algo confiável e que me permita ter uma boa produtividade.

Eu já estou em andamento com o WCF . Essa foi uma boa escolha? Que outra estrutura de rede devo considerar?


11
O WCF suporta conexões duplex (depois que a conexão é aberta, o cliente ou o servidor podem enviar mensagens um ao outro). Ele também pode lidar com diferentes protocolos (TCP + HTTP) ao mesmo tempo, sem nenhum esforço extra.
Jspbochi

Respostas:


2

Eu tenho usado o WCF para meu próprio jogo de estratégia baseado em turnos, e funcionou muito bem. As sessões duráveis ​​são excelentes e os canais duplex com retornos de chamada do cliente são ideais para enviar mensagens ao cliente à vontade do servidor. O WCF também suporta várias ligações de terminal, para que você possa conectar o player local através de uma ligação de pipe nomeada, enquanto os players remotos se conectam através de ligações de TCP.

Eu recomendo ligações TCP com formatação binária se você estiver enviando muitos dados em cada turno.


3

Se você se sentir confortável e produtivo no WCF, pode não haver uma forte razão para usar qualquer outra coisa. Certamente, acho que o WCF é um bom ponto de partida, porque se você seguir seu padrão de contrato, é um padrão fácil de converter para trabalhar com outros sistemas, caso seja necessário.

Para um dos meus próprios projetos, comecei com um protótipo do WCF. Quando entrei na "última milha", descobri que na maioria das vezes eu estava lutando com o WCF para fazer as coisas. Eu estava particularmente tendo problemas com a correspondência de jogos na pilha ponto a ponto do WCF, o que não me dava as ferramentas necessárias. Nesse projeto, acabei mudando para a biblioteca de rede do XNA, que me deu o matchmaking do tipo Xbox (e GamerTags e outros enfeites) que eu estava procurando e (mal) tentando emular no WCF. (Obviamente, a biblioteca de rede do XNA supõe que você esteja trabalhando em um jogo XNA e, infelizmente, ainda não suporta a publicação do jogo no Windows sem um contrato do GfW Live.)

Não toquei muito no meu código de rede no switch do WCF para o XNA Net, porque os contratos em si (as classes de interface) não mudaram muito (exceto a eliminação dos atributos do WCF). Escrever aulas de Reader / Writer que implementaram ou consumiram meus contratos foi bastante direto. Provavelmente, eu poderia ter mantido o suporte para ambos com um pouco de #if WINDOWSconfusão, mas decidi simplesmente abandonar o suporte ao WCF naquele momento, porque simplificava as coisas naquele projeto. Talvez seja interessante, ao iniciar outros projetos diretamente com a XNA Networking, ainda estou usando algo do padrão de "contrato" de interface / proxy do WCF. Eu pretendo escrever um post sobre esse assunto, na verdade, porque acho que é um bom padrão a seguir.


1

Se você está simplesmente passando "turn" muda para frente e para trás, então você está no melhor caminho. O WCF permitirá a você a maior flexibilidade sem adicionar muito a seus esforços de desenvolvimento, especialmente se você já conhece o .NET.

Como parece que a latência não é um problema no seu jogo, o WCF é uma ótima opção, porque abstrairá toda a codificação de mensagens e, como você não precisa obter todo o desempenho, essa abstração deve ser mais benéfico para você do que prejudicial.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.