Qual é a melhor maneira de manter todos os clientes sincronizados com um servidor e entre si?
Atualmente, temos duas abordagens em mente:
- Quando um cliente envia algo ao servidor, ele envia imediatamente mensagens para todos os clientes, que reagem imediatamente.
- A introdução de algum atraso de tempo, pelo qual o servidor envia mensagens para todos os clientes, com a diretiva ", age de acordo com isso no momento
t
.
A segunda abordagem parece que provavelmente manteria todos os clientes em melhor sincronização (já que ela atende a algum grau de atraso); mas me pergunto se a capacidade de resposta seria perdida em um grau muito alto (ou seja, o usuário clica em "pular" e há uma lacuna visível entre pressionar o botão e realmente pular).
Também há a possibilidade de os clientes calcularem sua própria posição (e não esperar que os servidores digam "você pulou"); mas, devido ao inevitável atraso, os clientes ficariam muito fora de sincronia.
Depois, há toda a questão TCP vs. UDP; porque queremos rápido, mas também detestaria que o servidor dissesse que você está em um local completamente diferente do que você pensava.
Com todas essas demandas concorrentes, tudo fica muito incerto sobre como devemos abordar esse problema. Qual dessas abordagens (ou qualquer outra) seria melhor para manter os clientes e o servidor sincronizados? Quais são realmente usados na indústria?
fonte
Aqui estão alguns bons links que cobrem uma enorme quantidade de redes de jogos.
E esta é a primeira parte das mais mãos na série de redes. http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/
Pela história. 'desculpe, mas como mecanismo de prevenção de spam, os novos usuários podem postar apenas um máximo de um hiperlink. Ganhe 10 reputação para postar mais hiperlinks. ' Basta olhar em seu site, de qualquer maneira.
fonte
Como você menciona clientes e servidores, vou assumir que você está falando de uma arquitetura cliente / servidor em que o servidor é a autoridade no estado de todos os objetos.
Nota: A alternativa é uma arquitetura ponto a ponto em que o proprietário de um objeto é a autoridade para esse objeto.
Já existe um método comprovado para sincronizar objetos em movimento usando a arquitetura Cliente-Servidor. Chama-se Dead Reckoning. .
Uma boa maneira de implementar isso em um jogo seria assim:
fonte