Javascript e PHP para multiplayer em tempo real? [fechadas]

13

Gostaria de saber se a combinação de clientes Javascript com servidores PHP / mysql é uma boa idéia para jogos em navegador multiplayer em HTML5 em tempo real (pequena escala)?

Meu conhecimento técnico é muito limitado e, embora eu planeje aprender o node.js no futuro, a curva de aprendizado é bastante grande no momento.

Como eu já estou familiarizado com o PHP, sinto que o faria funcionar muito mais rápido.

A escala que estou pensando é de 2 a 8 jogadores na época. E tentando manter a contagem de mensagens do cliente no servidor o mais baixa possível.

Os valores que pretendo armazenar / manipular são:

  • Nome e ID do jogador.
  • Posição X e Y.
  • Saúde.
  • Itens equipados (máximo de 8 slots, provavelmente menos).
  • Ações (caminhar, atacar, usar etc, mas apenas 1 ação / jogador de cada vez).
  • Bullet X, coordenadas Y e trajetória.
  • Nome da guilda / clã.
  • E algumas funções básicas de bate-papo / correspondência.

Meu palpite é que, embora não seja a melhor solução, mas enquanto eu mantiver a lógica pequena, isso será completamente possível. Estou certo?

justanotherhobbyist
fonte
4
Parece perfeitamente factível. Por que você não tenta? Na pior das hipóteses, você gasta algum tempo aprendendo; na melhor das hipóteses, consegue exatamente o que deseja.
William Mariager
1
Sim, mas eu imagino que isso levaria algum tempo criando, e eu não gosto de perder tempo, foi por isso que perguntei aqui. =)
justanotherhobbyist
8
Se você aprender algo, o tempo não foi desperdiçado. ;) Algo que vale a pena considerar é que, se você mudar de idioma, estará gastando tempo aprendendo o novo idioma e aprendendo redes ao mesmo tempo, o que significa muito mais depuração para descobrir onde você errou. Se você seguir o que sabe, aprenderá primeiro a rede e, em seguida, poderá portá-la se for ineficiente; e da próxima vez que alguém fizer uma pergunta semelhante, você saberá a resposta certa porque a testou.
William Mariager
1
Isso é realmente um bom ponto
justanotherhobbyist

Respostas:

12

Para um jogo em tempo real, você deseja minimizar a latência. Aqui estão duas dicas para alcançá-lo, com notas sobre PHP e Node:

  1. Use WebSockets. Eles permitem a comunicação bidirecional rápida entre o servidor e o cliente. O uso do node.js aqui tem a vantagem de poder usar a mesma API JavaScript nas duas extremidades do canal. Há também o maravilhoso módulo socket.io do node.js que fornece tecnologias de fallback para navegadores menores que não oferecem suporte ao WebSockets. Pesquisando um pouco, parece que você também pode usar WebSockets do PHP, se realmente quiser.
  2. Não envolva banco de dados em tempo crítico, como coordenadas de objetos em movimento rápido. Isso significa mantê-los na memória, o que não é particularmente adequado para o modelo tradicional de uso do PHP, sendo acionado uma vez para cada solicitação ao apache (ou qualquer servidor web), mas você pode iniciar o aplicativo do servidor PHP também como autônomo. Eu acho que o Node, com seu núcleo V8, será mais rápido que o PHP . Se isso é um problema, depende de quão exigente é o seu jogo e da potência do servidor.

Eu mesmo acho o node.js muito fácil de entender e, como você precisará codificar bastante JavaScript de qualquer maneira, eu recomendo que você experimente. Pelo menos, dê uma olhada rápida nos tutoriais socket.io para ver como é trivial configurar um canal de comunicação em tempo real.

Tapio
fonte
+1 no ponto 2. O maior erro que você pode com isso é esperar que as consultas MySQL sejam acionadas em cada evento. Tudo o que você pode fazer para remover os dados do jogo do HDD vai ajudar. Eu tive sucesso em abusar do Memcached por isso. Sem dúvida, existem outras maneiras.
31412 DampeS8N
Sim, eu realmente quero aprender o nó, mas ainda tenho que começar com o cmd, o maior erro que os desenvolvedores fizeram foi dificultar a entrada. Pelo menos agora a versão do Windows vem com um instalador, pode tentar se eu encontrar um bom tutorial.
justanotherhobbyist
O nó não é nada difícil de iniciar ou usar. Mais difícil que o PHP, sim, mas o PHP paga um preço terrível por sua conveniência - o design que permite que ele seja incorporado ao Apache e ativado por padrão em qualquer lugar sem configuração também causa muitos problemas que tornam o PHP total e absolutamente a pior escolha para você. pode criar um back-end em tempo real. Nó, Python, Ruby, Java, etc, todos exigem que você configure o servidor de aplicativos, mas esse modelo permite um processamento na memória controlado por eventos altamente escalável que é literalmente impossível de se obter no PHP.
5138 Sean Seanledleditch
1

Juntamente com a resposta de Tapio, gostaria de sugerir apenas (se possível) enviar a entrada do usuário (cliques e entrada do teclado) para o servidor e ter o servidor e o cliente emulando o jogo. Cada N assinala que o cliente solicita uma sincronização ao servidor, e o servidor responde com todas as informações necessárias para renderizar o jogo, como saúde, itens etc. Isso é para garantir que o cliente também não seja dessincronizado Muito de.

É claro que o servidor e o cliente precisam ter exatamente a mesma implementação do jogo, portanto isso pode ser um pouco mais trabalhoso. Se você tiver implementações perfeitas no cliente e no servidor, o cliente precisará sincronizar com menos frequência.

Isso reduzirá as mensagens do cliente / servidor e reduzirá a latência. Isso também ajudaria a evitar trapaças.

Supondo que você esteja criando este jogo em JavaScript, pode valer a pena escrever o back-end em JavaScript também, usando o NodeJS. Dessa forma, você pode reutilizar a implementação JavaScript do seu jogo para o servidor e o cliente.

art0rz
fonte
0

Eu recomendo aprender Nodejs. Se você já possui Javascript, não será tão difícil. Eu criei um jogo TRON Multiplayer rapidamente com o Nodejs e foi meu primeiro dia de uso. (Ah, e o cliente era uma tela HTML5; eu estava apenas enviando informações importantes, conforme mencionado nos outros comentários.)

Dê uma olhada em um módulo chamado nowjs. Boa sorte!

David Da Silva Contín
fonte