He estado leyendo el artículo de Valve sobre redes multijugador que se ha adaptado del artículo de 2001 de Yahn Bernier llamado Métodos de compensación de latencia en el diseño y optimización de protocolos en el juego cliente / servidor . Estoy haciendo un juego multijugador en tiempo real usando un servidor node.js conectado a clientes a través de socket.io y tengo algunas preguntas sobre los principios detallados a continuación:
Interpolación de entidad
[Interpolación] evita el movimiento nervioso que esto normalmente llevaría al almacenar temporalmente las actualizaciones del servidor y luego reproducirlas con los espacios interpolados suavemente. También puede proteger contra fallas ocasionadas por la pérdida de paquetes.
Predicción del lado del cliente
La predicción es la noción de que el cliente predice los efectos de las acciones del jugador local sin esperar a que el servidor los confirme. El estado previsto de una entidad se prueba con los comandos del servidor a medida que llegan hasta que se detecta una coincidencia o una coincidencia incorrecta.
Compensación de retraso
La compensación de retraso es la noción de que el servidor usa la latencia de un jugador para rebobinar el tiempo al procesar [entrada del usuario], para ver lo que el jugador vio cuando se envió el comando. En combinación con la predicción, la compensación de retraso puede ayudar a combatir la latencia de la red hasta el punto de eliminarla desde la perspectiva de un atacante.
¿Los principios se aplican a TCP como lo hacen a UDP y habría alguna diferencia en la implementación? Puedo ver que la interpolación de la entidad no necesitaría proteger contra la pérdida de paquetes, pero eso es todo.
¿Puedo incluso comunicarme entre un servidor y un navegador web y viceversa usando UDP y Node.js?
Dado que el documento tiene más de una década, ¿se siguen utilizando estos principios o ha aparecido otra tecnología?
Cualquier ayuda sería muy apreciada.
Respuestas:
fuente
Deberías consultar este artículo sobre juegos multijugador en tiempo real en HTML5 publicado en el sitio buildnewgames.com por Sven Bergstrom, él habla sobre las mismas cosas y está usando Node.JS. Tengo algo similar yendo yo mismo. Ahora estoy investigando más sobre la predicción e interpolación del lado del cliente y cosas similares antes de intentar abordar el resto.
Creo que definitivamente es posible hacer esto con Socket.IO y Node, sin embargo, la tecnología aún es nueva, por lo que habrá poca documentación y poco o nada de guías de implementación. Recomendaría hacer lo que estoy haciendo y estudiar el tema con gran detalle en términos abstractos de alto nivel y luego tratar de implementarlo usted mismo.
fuente
Creo que la tecnología es más o menos la misma. Además, los conceptos no dependen del idioma que use o de si utiliza UDP o TCP. He escrito una explicación muy detallada de todo esto aquí http://www.gabrielgambetta.com/fpm1.html , incluyendo diagramas bonitos :)
fuente