Como construir um jogo simples para 2 jogadores, comunicando-se pela internet, sem código customizado em nenhum servidor?

StackOverflow https://stackoverflow.com/questions/2144287

  •  23-09-2019
  •  | 
  •  

Pergunta

Como posso construir um jogo simples para 2 jogadores, que se comunique pela internet?

Preciso resolver os problemas de:

  • pesquisa ou encontro - dois jogadores querem se encontrar.

  • comunicações contínuas.Qualquer jogador pode iniciar uma ação que exija a entrega de informações ao outro lado, em um período de tempo razoavelmente rápido (latência do tipo IM, não latência do tipo e-mail).

Neste sentido, suponho que seja equivalente a um chat bidirecional, onde as pessoas querem poder encontrar-se e depois, uma vez emparelhadas, intercomunicar-se.

Requisitos adicionais:

  1. por enquanto, suponha que os endpoints sejam o sistema operacional Windows, relativamente recente.

  2. suponha que nenhuma máquina endpoint esteja diretamente acessível pela Internet.Suponha que sejam máquinas clientes, escondidas atrás de firewalls que bloqueiam solicitações recebidas.As máquinas podem fazer solicitações de saída.(digamos, por HTTP, mas TCP também funciona)

  3. a comunicação deve ser privada.Para simplificar, digamos que já exista um segredo compartilhado e que os endpoints sejam capazes de executar AES.Acho que o que quero dizer com isso é que nenhum intermediário deve precisar descriptografar os pacotes de mensagens.A descriptografia acontecerá apenas nos endpoints.

  4. todo código personalizado deve ser executado apenas nos PCs clientes.

  5. Suponha que não haja nenhum servidor na Internet sob meu controle.

  6. Fico feliz em usar servidores de terceiros para facilitar a intercomunicação, como um servidor de mensagens instantâneas ou algo assim, desde que seja gratuito e não seja necessário instalar código personalizado nele.


Quais APIs estão disponíveis para facilitar esse design?

Posso fazer isso com APIs de mensagens instantâneas?WCF?Existem canais WCF para Windows Messenger?

Quais protocolos?HTTP?Eu tenho isso marcado como "ponto a ponto", mas quero dizer que virtualmente;não há requisitos rígidos para um protocolo p2p formal.

Quais formatos de mensagem você usaria?


EDITAR

Para esclarecer os requisitos em torno dos servidores, o que eu quero é NENHUM SERVIDOR SOB MEU CONTROLE.E NENHUM MEU CÓDIGO PERSONALIZADO EM QUALQUER SERVIDOR.Isso não é o mesmo que "Sem servidor".

Pense desta forma:Posso enviar um e-mail por SMTP, usando um código personalizado que escrevo no lado de envio e recebimento.Meu código personalizado pode ser conectado por meio de um servidor SMTP intermediário gratuito.Isso não exigiria instalação de código no servidor SMTP.Isso é algo parecido com o que eu quero, mas o SMTP não é aceitável por causa da latência.

EDITAR2
Eu também encontrei isso: biblioteca para mensagens instantâneas, como libpurple, mas escrita em C#


RESPONDER

Posso fazer o que quiser, usando bibliotecas para estruturas de IM.Uma maneira simples de fazer isso usando o Windows Live Messenger é usar o SDK de atividades do Messenger.Isto prova o conceito, mas não é realmente uma solução geral.Mas coisas semelhantes podem ser realizadas com as bibliotecas de mensagens instantâneas para vários sistemas de mensagens, como libpurple, ou usando libs para canais de IRC.Em todos esses casos, os servidores de mensagens instantâneas atuam como infraestrutura de comunicações que penetra no firewall.

Foi útil?

Solução

libpurple juntamente com otr pode fornecer a você a privacidade a mais, esse aplicativo precisaria.

Outras dicas

IM é a ferramenta errada.Em vez disso, use uma sala de chat IRC.

Com uma sala de chat IRC, seus clientes “fazem login” na sala de chat, e isso é usado para sua “presença”.Qualquer pessoa na sala de chat está “disponível” para jogar.

Feito isso, as instâncias do jogo se comunicam através da sala de chat.Eles podem usar o canal global ou simplesmente canais privados de IRC para tráfego de jogos.

Os problemas a resolver:

  • Primeiro, todo o estado do jogo é compartilhado nos clientes.Muitos jogos fizeram isso (RTS como Age of Empires, RPGs como Diablo).Mas os estados clientes são suscetíveis a hackers e trapaças.Isso é apenas uma verdade pura.Se o jogo for popular, SERÁ hackeado.

  • Tráfego de ping.Basicamente o fluxo é você fazer login na sala, seu cliente fica no modo "disponível para jogar".Em seguida, ele envia um ping para TODOS os outros para ver se ELES estão disponíveis para jogar.Isso acontecerá com cada cliente “login” na sala de chat.Você pode então usar a sala pública para transmitir eventos "Frank está pronto para um novo jogo", "Frank começou um jogo com Joe", etc.Isso pode ajudar a manter os jogos sincronizados e sem tagarelar, mas quando um cliente se conecta à sala de chat, ele diz "Oi pessoal, é o Bob, o que vocês estão fazendo".Então você precisa gerenciar isso.

  • Volume de trafego.As salas de IRC podem lidar com muito tráfego, mas não MUITO tráfego.A maioria é projetada para evitar "spam", "inundação", etc.Portanto, você pode muito bem ter uma taxa limitada em seu jogo.Não é um problema para “Checkers”, ainda mais para “World of Warcraft” durante um ataque de 40 homens.Esse é um problema de design de jogo.

  • Termos de serviço.O provedor de IRC pode muito bem dizer "Ah, não, você não pode fazer isso com nosso serviço".Não investiguei isso, então não sei, mas pode ser um problema.

Fora isso, o IRC é uma ótima opção.Muitos códigos de bots de IRC flutuando na rede, nunca usei nada disso.

Cada jogo de dois jogadores deve ter algum tipo de ambiente de servidor pela necessidade básica de ter que se comunicar entre dois clientes/jogadores, no mínimo. Lembre -se de que cada um dos clientes/jogadores também pode atuar como seu próprio servidor para se comunicar com outros clientes vinculados. Mas a necessidade de acompanhar todos os clientes/jogadores a qualquer momento e a necessidade de facilitar a pesquisa de outros clientes/jogadores exige inerentemente algum tipo de ambiente do servidor.

Você pode configurar um quadro de mensagens em um dos servidores gratuitos do quadro de mensagens para que os jogadores possam se encontrar. Você provavelmente vai incentivá -los a usar mensagens privadas para trocar endereços IP. Em seguida, use um protocolo que se conecte usando endereços IP. Boa sorte com isso. Os firewalls fazem com que seja uma dor.

Então, é claro, uma máquina do par precisaria atuar como servidor, a outra como cliente. Seu software deve conter os dois conjuntos de código. Eu escrevi esse jogo e posso dizer que o código de comunicação fica um pouco confuso.

Posso dizer agora que você ficaria muito mais feliz na vida se escrevesse um serviço da web para facilitar a comunicação. Mas, então, você precisaria de um servidor para isso.

Boa sorte. Você vai precisar disso.

Ou você pode apenas escrever um jogo para um cliente de IM, como o Microsoft Messenger. Eu já vi jogos para isso, então sei que isso pode ser feito.

Como alguém disse, ainda não é possível fazê -lo se você não tiver nenhum servidor mediado entre 2 jogadores. Como você está feliz em usar o servidor de terceiros, sugiro que você construa seu sistema usando Google App Engine + Xmpp sobre http. Funciona bem na Internet e atrás do firewall. E, no entanto, é gratuito (desde que seu sistema não cresça na cota GAE).

Pare para par está fora devido à sua restrição de firewall. De qualquer forma, isso não funciona facilmente para serviços de diretório.

O próximo método mais fácil que eu usaria é lançar um script de servidor CGI muito simples em um dos inúmeros sites de hospedagem super baratos. Parece que você não quer seguir esse caminho. Existe alguma razão específica? 100 linhas de código e um servidor super barato devem fornecer tudo o que você está pedindo e muito mais.

Suponho que você possa se conectar a algum tipo de coisa de biblioteca de bate -papo de terceiros. Não sei sobre os protocolos IM atuais, mas o bom e velho IRC e um canal separado para o seu jogo funcionariam. Você pode até reunir algo usando FTP. Os comentários do blog em um site de blog gratuitos também funcionariam. A questão é por que?

Estes são todos kludges. Eles fazem o trabalho de maneiras obtusas, deselegantes e de escala mal.

Peço que você reconsidere a solução do servidor da web.

Você tem muitos requisitos conflitantes. Ambos os clientes por trás de um firewall bloqueando solicitações recebidas significa que eles não podem fazer Peer-2-Peer, pois nenhuma das máquinas pode atuar como servidor, e você precisará ter um servidor de transporte no meio em algum lugar, roteando as mensagens para cada cliente. No momento, o que você está pedindo é praticamente não possível, dado o requisito de não servidor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top