Estoy desarrollando un juego de estrategia en tiempo real para un curso de informática que estoy tomando. Uno de los aspectos más difíciles parece ser la red y la sincronización cliente-servidor. He leído sobre este tema (incluidos 1500 arqueros ), pero he decidido adoptar un enfoque cliente-servidor en lugar de otros modelos (a través de LAN, por ejemplo).
Este juego de estrategia en tiempo real viene con algunos problemas. Afortunadamente, cada acción que realiza el jugador es determinista. Sin embargo, hay eventos que suceden en intervalos programados. Por ejemplo, el juego se compone de fichas, y cuando un jugador toma una ficha, el "nivel de energía", un valor en esa ficha, debería crecer en uno cada segundo después de que se toma. Esta es una explicación muy rápida que debería justificar mi caso de uso.
En este momento estoy haciendo clientes ligeros, que solo envían paquetes al servidor y esperan una respuesta. Sin embargo, hay varios problemas.
Cuando los juegos entre jugadores se convierten en finales del juego, a menudo hay más de 50 eventos por segundo (debido a los eventos programados, explicados anteriormente, acumulados), y los errores de sincronización comienzan a aparecer en ese momento. Mi mayor problema es que incluso una pequeña desviación en el estado entre los clientes podría significar diferentes decisiones que los clientes toman, lo que se convierte en juegos completamente separados. Otro problema (que no es tan importante en este momento) es que hay latencia y uno tiene que esperar unos milisegundos, incluso segundos después de hacer su movimiento para ver el resultado.
Me pregunto qué estrategias y algoritmos podría usar para hacer esto más fácil, más rápido y más agradable para el usuario final. Esto es especialmente interesante dada la gran cantidad de eventos por segundo, junto con varios jugadores por juego.
TL; DR haciendo un RTS con> 50 eventos por segundo, ¿cómo sincronizo clientes?