Como se mencionó, esto es imposible, así que probaría otro enfoque:
Si no tiene un servidor dedicado, elija un cliente participante para que se convierta en el host (esto se puede transferir si es necesario).
El anfitrión ahora realizará toda la lógica importante del juego, como detección de golpes, controles de IA, manejo de inventario, etc., así como el seguimiento del tiempo (es decir, dictar el tiempo del juego).
Los otros clientes solo intentarán mantenerse sincronizados con el host, tratando de estimar o aproximar el valor esperado. Si el retraso aumenta o hay una pérdida de paquetes, las cosas pueden volverse entrecortadas, pero es trivial ponerse al día, esencialmente esperando la próxima actualización.
La mayoría de los juegos (especialmente FPS) ocultan este hecho al hacer su propio cálculo local para el propio movimiento del jugador, disparos, etc. para evitar que el juego se sienta lento. Todo aún se corrige en función de los datos del servidor. Esto puede generar cierta confusión, por ejemplo, te ves disparando al enemigo, pero en el mismo momento que caes muerto (sin que el enemigo reciba un golpe), pero sigue siendo un enfoque mucho mejor que la sincronización completa.
Si aún insiste en mantener todo sincronizado, es probable que desee crear algún tipo de paso o contador de trama, para que todos los clientes solo procesen un paso lógico, luego sincronicen sus datos, etc. Tenga en cuenta que esto puede ser ancho de banda intensivo y lento, por lo que no recomendaría hacerlo a menos que tenga muchos datos de otra manera y su juego esté basado en turnos (por ejemplo, juegos de estilo Artillery / Worms).