Como lidar com multiplayer em JavaScript?


12

Estou apenas pesquisando um pouco de tecnologia para usar em um jogo para múltiplos jogadores em dispositivos móveis.

No momento, é mais um experimento, portanto, no momento, a única coisa que os Jogadores precisam estar cientes dos outros jogadores.

Se esse fosse um aplicativo típico da Web e não um jogo, haveria solicitações HTTP disparando o tempo todo - mas, como esse é um jogo, o desempenho e a precisão serão um problema.

Como o jogo é direcionado para várias plataformas de telefone, digamos que o cliente seja escrito em JavaScript ou em uma estrutura baseada em JavaScript. A tecnologia do servidor é totalmente aberta.

Cada jogador precisará fazer o equivalente a uma postagem HTTP e obter apenas um protocolo mais rápido. A razão para o multiplayer ser baseado na Web é porque o multiplayer através de Bluetooth ou outra rede local seria muito diverso nas plataformas e poderia causar problemas.

Portanto, a questão se resume a qual é um bom protocolo / tecnologia a ser usado no multiplayer JavaScript? Algum conselho sobre as coisas do lado do servidor ou isso importa? Alguma razão para eu abandonar essa arquitetura de duas camadas e usar a conexão direta de telefone a telefone?

Respostas:


15

Você quer um protocolo de comunicação melhor que o HTTP. Você provavelmente deseja UDP ou TCP. Os navegadores não têm como fazer comunicação UDP, portanto, sua única opção é TCP.

Para o TCP, você deseja usar um WebSocket , no entanto, o suporte ao navegador é instável nos websockets.

Isso significa que você precisaria usar um COMET técnica para emular o TCP, uma emulação popular seria um soquete da Web incorporado em um aplicativo flash.

Socket.IO é uma biblioteca (para node.js ) que suporta websockets e os emula com um fallback apropriado em navegadores da web não compatíveis (usa flash e outras técnicas COMET).

Para jogos JavaScript multiplayer, eu recomendaria o uso de socket.io e node.js


1
Aqui está uma amostra de um jogo em tempo real feito com HTML5 e WebSockets: rawkets.com . O código fonte está disponível aqui: github.com/robhawkes/rawkets
Elisée

1
Aqui estão mais dois exemplos
Raynos

4

Tanto a pergunta quanto a resposta aceita foram publicadas em 2011, e os tempos mudaram bastante desde :)

O Websockets é bastante prevalente, mas uma tecnologia ainda melhor é o WebRTC, que permite fluxos UDP não confiáveis. Estes são muito, muito melhores para jogos.

Além da comunicação, existem muitos outros obstáculos a serem superados ao escrever jogos multiplayer, como reconciliação do estado do jogo, previsão do lado do cliente, serialização e muitos outros.

<shameless self promotion>

Sou um dos desenvolvedores originais do lance.gg , um servidor / biblioteca de jogos para vários jogadores baseado no node.js, onde resolvemos muitos dos problemas mencionados (e muitos outros!). Nosso objetivo é facilitar o desenvolvimento de jogos multiplayer para desenvolvedores de jogos JavasScript. Convido você a usá-lo como ponto de partida para fazer seu jogo.

</shameless self promotion>


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.