Tengo el comienzo de un pequeño juego para varios jugadores que estoy escribiendo en python como ejercicio de aprendizaje. Actualmente, el servidor funciona a 10 fps, mientras que los clientes funcionan a la velocidad que deseen. Esto funciona bien para conservar el ancho de banda, pero a menos que el cliente le informe al servidor cuando se produjo su entrada, todas las entradas se cuantifican a intervalos de 100 ms. ¿Cómo puedo sincronizar el tiempo entre el cliente y el servidor para poder hacer estas correcciones? Un gran obstáculo aquí es que tendré que determinar los tiempos de ping y compensarlos.Sincronización del tiempo entre el servidor simple basado en socket python y los clientes
Respuesta
Me encontré accidentalmente con un excruciatingly fine blog post sobre cómo hacer la física de la red distribuida en general (sin la predicción tradicional del cliente). Lo recomiendo encarecidamente, junto con las diapositivas GDC presentadas por Fiedler hace un par de años. ¡Buena suerte!
Gracias, recuerdo esas publicaciones de blog de hace mucho tiempo cuando la serie estaba incompleta. El último sobre redes es genial, ¡y debería ayudar mucho! – Alex
Esta es una pregunta muy interesante. Lamentablemente, no hay una respuesta fácil. Simplemente debe entender bien el problema y conformarse con una solución que sea lo suficientemente buena como para su aplicación.
Mi primer instinto fue que el Network Time Protocol (NTP) para configurar relojes de máquina desde servidores NTP habría solucionado este problema. Una de las cuestiones abordadas se refiere a Jitter Buffers, que implica packet delay variation. Esto se elabora en RFC 3393; IP Packet Delay Variation Metric for IP Performance Metrics (IPPM).
Examinaré NTP, que de hecho puede proporcionar una idea de mi situación. – Alex
- 1. Escribir un servidor basado en socket en Python, ¿estrategias recomendadas?
- 2. Sincronización del estado del juego Cliente-Servidor
- 3. Sincronización entre Servidor Sql y Servidor Mysql
- 4. Sincronización en tiempo real de los datos de la base de datos en todos los clientes
- 5. Python Simple SSL Socket Server
- 6. Servidor trenzado para varios clientes
- 7. Servidor de socket simple en Bash?
- 8. Un servidor Http simple con Java/Socket?
- 9. El socket del servidor se bloquea en Close_Wait
- 10. Oyentes de multiprocesamiento y clientes entre python y pypy
- 11. Python: unidad de prueba basada en el código del socket?
- 12. cómo hacer que el socket del cliente espere datos del socket del servidor
- 13. Biblioteca simple del servidor AtomPub
- 14. Servidor muy simple en C
- 15. Empuje del servidor en tiempo real con Socket IO (o Strophe.js), XMPP y Django
- 16. Java, aumente el tiempo de espera del socket
- 17. iPhone Socket TCP/IP del servidor/cliente
- 18. socket simple con php y delphi?
- 19. Loop basado en tiempo y Loop basado en Frame
- 20. ¿Cerrar el servidor de socket en socket.io?
- 21. Establecer el tiempo de espera del socket en Ruby mediante la opción de socket SO_RCVTIMEO
- 22. La conexión de socket a un servidor basado en telnet se cuelga al leer
- 23. Sincronización simple de subprocesos
- 24. Web socket modelo de procesamiento del lado del servidor
- 25. Sincronización del sitio de Drupal entre desarrollador, montaje y producción
- 26. Android para escuchar los mensajes de socket del servidor
- 27. Java: sincronización de varios subprocesos según el paso del tiempo
- 28. ¿Cómo alojar el servicio WCF y el servidor TCP en el mismo socket?
- 29. Código simple para servidor FTP en python
- 30. Transferencia del controlador de socket entre procesos independientes
La respuesta que la mayoría de los otros diseñadores de juegos han encontrado es que (básicamente) nunca obtendrás una buena sincronización. Los juegos grandes como wow y kin simulan la mayoría de las acciones del lado del cliente, e impulsan las actualizaciones en cualquier dirección, según sea conveniente. –