¿Cuál es la mejor manera de mantener todos los clientes sincronizados con un servidor y entre ellos?
Actualmente, tenemos dos enfoques en mente:
- Cuando un cliente envía algo al servidor, el servidor envía inmediatamente mensajes a todos los clientes, que reaccionan de inmediato.
- Introduciendo algún retraso de tiempo, mediante el cual el servidor envía mensajes a todos los clientes, con la directiva, "actúe sobre esto a tiempo
t
.
El segundo enfoque parece que probablemente mantendría a todos los clientes en una mejor sincronización (ya que ofrece cierto grado de retraso); pero me pregunto si la capacidad de respuesta se perdería en un grado demasiado alto (es decir, el usuario hace clic en "saltar" y hay una brecha notable entre presionar el botón y realmente saltar).
También existe la posibilidad de que los clientes calculen su propia posición (y no esperen a que los servidores digan "has saltado"); pero debido al retraso inevitable, los clientes estarían muy desincronizados.
Luego está toda la pregunta TCP vs. UDP; porque lo queremos rápido, pero también odiaría que el servidor diga que estás en una ubicación completamente diferente de lo que pensabas.
Con todas estas demandas en competencia, todo se vuelve muy incierto sobre cómo debemos abordar este problema. ¿Cuál de estos enfoques (o cualquier otro) sería mejor para mantener sincronizados a los clientes y al servidor? ¿Cuáles se usan realmente en la industria?
fuente
Aquí hay un par de buenos enlaces que cubren una gran cantidad de redes de juegos.
Y esta es la primera parte de la serie de redes más prácticas. http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/
Por la historia. 'lo sentimos, pero como mecanismo de prevención de spam, los nuevos usuarios solo pueden publicar un máximo de un hipervínculo. Gana 10 reputación para publicar más hipervínculos. Solo mire alrededor de su sitio web, de todos modos.
fuente
Como menciona Clientes y Servidores, voy a suponer que está hablando de una arquitectura Cliente / Servidor en la que el Servidor es la autoridad en el estado de todos los objetos.
Nota: La alternativa es una arquitectura punto a punto donde el propietario de un objeto es la autoridad para ese objeto.
Ya existe un método bien probado para sincronizar objetos en movimiento utilizando la arquitectura Cliente-Servidor. Se llama Dead Reckoning. .
Una buena manera de implementar esto en un juego sería así:
fuente