Estive lendo o artigo da Valve sobre redes para vários jogadores que foi adaptado do artigo de Yahn Bernier em 2001 chamado Métodos de compensação de latência no projeto e otimização de protocolos no cliente / servidor no jogo . Estou criando um jogo para vários jogadores em tempo real usando um servidor node.js. conectado aos clientes através do socket.io e tenho algumas perguntas sobre os princípios detalhados abaixo:
Interpolação de entidade
[Interpolação] evita o movimento instável que isso normalmente levaria ao armazenar em buffer as atualizações do servidor e depois reproduzi-las com as lacunas interpoladas suavemente entre elas. Também pode proteger contra falhas causadas pela perda de pacotes.
Previsão do lado do cliente
Previsão é a noção do cliente prever os efeitos das ações do jogador local sem esperar pelo servidor para confirmá-las. O estado previsto de uma entidade é testado em relação aos comandos do servidor à medida que chegam até que uma correspondência ou uma correspondência incorreta seja detectada.
Compensação de atraso
Compensação de atraso é a noção de que o servidor usa a latência de um jogador para retroceder o tempo ao processar [entrada do usuário], para ver o que o jogador viu quando o comando foi enviado. Em combinação com a previsão, a compensação de atraso pode ajudar a combater a latência da rede a ponto de quase eliminá-la da perspectiva de um invasor.
Os princípios se aplicam ao TCP como ao UDP e haveria alguma diferença na implementação? Percebo que a interpolação de entidade não precisaria proteger contra a perda de pacotes, mas é isso.
Posso me comunicar entre um servidor e um navegador da web e vice-versa usando UDP e Node.js?
Como o artigo tem mais de uma década, esses princípios ainda estão em uso ou apareceu outra tecnologia?
Qualquer ajuda seria muito apreciada.
Respostas:
fonte
Você deve conferir este artigo sobre os jogos multijogador em tempo real em HTML5, publicado no site buildnewgames.com por Sven Bergstrom, ele fala sobre as mesmas coisas e está usando o Node.JS. Eu mesmo tenho algo parecido. Agora, estou pesquisando mais sobre a previsão e interpolação do lado do cliente e coisas do gênero antes de tentar resolver o restante.
Eu acredito que é definitivamente possível fazer isso com o Socket.IO e o Node, no entanto, a tecnologia ainda é nova, portanto haverá pouca documentação e pouco ou nada no caminho dos guias de implementação. Eu recomendaria fazer o que estou fazendo e estudar o assunto detalhadamente em termos abstratos de alto nível e tentar implementá-lo você mesmo.
fonte
Eu acredito que a tecnologia é praticamente a mesma. Além disso, os conceitos não dependem de qual idioma você usa ou se utiliza UDP ou TCP. Eu escrevi uma explicação muito detalhada de tudo aqui http://www.gabrielgambetta.com/fpm1.html , incluindo belos diagramas :)
fonte