2010-05-17 10 views
15

Imaginemos un juego realmente simple ... Tenemos un labirinth y dos jugadores tratando de averiguar la salida en tiempo real a través de internet.¿Cómo los clientes de juegos en línea pueden intercambiar datos a través de Internet tan rápido?

En cada jugada, el cliente debe enviar las coordenadas del jugador al servidor y aceptar las coordenadas actuales de otro cliente. ¿Cómo es posible hacer este intercambio tan rápido (como lo hacen todos los juegos modernos)?

Ok, podemos usar Memcache o una tecnología similar para reducir las operaciones de extracción de datos en el lado del servidor. También podemos usar el servidor web más rápido, etc., pero todavía tendremos problemas con los tiempos.

Por lo tanto, las preguntas son ...

  1. Clientes juego protocolo usualmente articulan para el intercambio de información con el servidor?
  2. ¿Qué tecnologías de servidor están llegando para resolver este problema?
  3. Lo que se aplican algoritmos para luchar con retrasos durante el juego, etc.
+2

maldita sea, he leído en algún lado sobre las técnicas de redes de John Carmack en DOOM y Quake y no encuentro el enlace. ¡Maldita sea! –

Respuesta

5
  • uso de UDP, TCP no
  • utilizan un protocolo personalizado, por lo general un solo byte de la definición de un "comando", y tan pocas subsecuente bytes posible que contiene los argumentos de comandos
  • predicción se utiliza para hacer los movimientos de los otros jugadores aparecen sin problemas y sin tener que obtener una actualización para cada fotograma

sugerencia: la predicción se usa de todos modos para suavizar la actualización de pantalla rápida (~ 60 fps) ya que la velocidad real del juego suele ser más lenta (~ 25 fps).

+0

No es tan simple como usar UDP sobre TCP. TCP le ofrece una gran cantidad de funcionalidades realmente útiles que tendrá que crear usted mismo si usa UDP. TCP solo tiene problemas si tiene una pérdida de paquetes que actualmente es bastante poco común. Muchos grandes MMO usan TCP. UDP solo es necesario si su juego fallará si hay retrasos largos ocasionales entre paquetes (debido a reenvíos de paquetes perdidos). Piense mucho antes de decidir sobre UDP. –

+1

Robert: UDP se usa entre muchos, muchos juegos de FPS en línea; es simplemente el protocolo de red más rápido disponible porque no quiere esperar a que TCP reenvíe paquetes y verifique la integridad de la cola. Creo que la respuesta es válida si el juego en cuestión no necesita un tipo de verificación de integridad completa y necesita los tiempos de respuesta más rápidos disponibles. – scape

3

Las otras respuestas no han explicado un par de ideas falsas importantes en el post original, y es que estos juegos no son sitios web y operar de manera diferente. En particular:

  • No hay o hay una "minería de datos" que necesita para ser acelerada. Los juegos en línea más rápidos (por ejemplo, los shooters en primera persona) normalmente no guardan nada en el disco durante un partido. Juegos en línea más lentos , como MMO, pueden usar una base de datos , principalmente para almacenar información del jugador, pero para la parte más mantienen sus datos de jugadores y mundiales en memoria, no en el disco.
  • No usan servidores web. HTTP es un protocolo relativamente lento , e incluso TCP solo puede ser demasiado lento para algunos juegos. En su lugar, tienen servidores a medida que están escritos solo para ese juego en particular. A menudo estos servidores están sintonizados para una baja latencia en lugar de rendimiento, ya que normalmente no sirven grandes documentos como lo haría un servidor web, pero muchos mensajes pequeños (por ejemplo, medidos en bytes en lugar de kilobytes).

Con estos dos problemas cubiertos, su problema de velocidad desaparece en gran medida. Puede enviar un mensaje a un servidor y obtener una respuesta en menos de 100 ms y puede hacerlo varias veces por segundo.

Cuestiones relacionadas