2010-09-23 13 views
6

Estoy buscando diseños de redes y trucos específicos para juegos. Conozco algunos problemas y tengo algunas soluciones parciales para algunos de ellos, pero puede haber problemas que aún no veo. Creo que no hay una respuesta definitiva a esto, pero aceptaré una respuesta que realmente me gusta. Puedo pensar en 4 categorías de problemas.Problemas de red en juegos

Malo red

Los mensajes enviados por los clientes a tomar algún tiempo para llegar al servidor. El servidor no puede simplemente procesarlos FCFS porque eso es injusto para los jugadores con mayor latencia. Una solución parcial para esto serían las marcas de tiempo en los mensajes pero necesita 2 cosas para eso:

  • Se puede confiar en el reloj del cliente. (Creo que esto es imposible.)
  • Latencias constantes que puede medir. ¿Qué puedes hacer con respecto a la latencia variable?

Muchos juegos usan UDP, lo que significa que se pueden perder mensajes. En ese caso, intentan estimar el estado del juego en función de la información que ya tienen. ¿Cómo se puede saber si el estado estimado es correcto o no después de que la conexión vuelva a funcionar?

En juegos MMO, el servidor maneja una gran cantidad de clientes. ¿Cuál es la mejor forma de distribuir la carga? ¿Basado en la ubicación en el juego? ¿Vincula un grupo de clientes a servidores? ¿Puedes evitar enviar todo a través del servidor?

jugadores dejando

he visto 2 comportamientos diferentes cuando esto sucede. En la mayoría de los juegos de FPS, si el jugador que organizó el juego (supongo que es el servidor) deja que los demás no puedan jugar. En la mayoría de los juegos de estrategia en tiempo real, si un jugador deja a los demás, puede seguir jugando sin él. ¿Cómo es posible sin un servidor dedicado? ¿Todos saben el estado completo? ¿Están transfiriendo el papel del servidor de alguna manera?

acceso a la información

El siguiente problema puede ser resuelto por un servidor dedicado, pero estoy ansioso por ver si se puede hacer sin una. En muchos juegos, los jugadores no deberían saber el estado completo del juego. La niebla de guerra en RTS y las paredes en FPS son buenos ejemplos. Sin embargo, necesitan saber si una acción es válida o no. (Por ejemplo, ¿me puedes disparar desde allí o estás del otro lado del mapa?) En este caso, los clientes deben validar los cambios en un estado desconocido. Esto suena como algo que se puede resolver con el uso inteligente de primitivos criptográficos. ¿Algunas ideas?

Hacer trampa

Algunos de los problemas anteriores son fáciles en un entorno de cliente de confianza, pero que no se puede asumir. ¿Existen soluciones que funcionan, por ejemplo, en un 80% de usuarios normales, un 20% de entorno de tramposo? ¿Realmente puedes crear un software anti-trampas que funcione (y no requiera cosas ridículas como módulos kernel)?

He leído estas preguntas y algunas de las respuestas https://stackoverflow.com/questions/901592/best-game-network-programming-articles-and-books pero otras respuestas enlazan al contenido no disponible/restringido. Esta es una pregunta independiente de la plataforma/sistema operativo, pero también son bienvenidas las soluciones para plataformas específicas/sistemas operativos.

+0

Una gran pregunta. –

+2

Quizás este sitio es más correcto para esta pregunta? http://gamedev.stackexchange.com/ – Nakilon

+0

No me di cuenta de que había una versión específica del juego del sitio. Gracias, definitivamente lo verificaré. – stribika

Respuesta

2

La criptografía de pensamiento resolverá este tipo de problema es un error muy común y muy malo: el cliente sí mismo, por supuesto, debe ser capaz de descifrarlo, por lo que es completamente inútil. No está agregando seguridad, solo está agregando oscuridad (y será se agrietará).

Hacer trampa es demasiado específico del juego. Hay algún tipo de juegos en los que no se puede eliminar por completo (aimbots en FPS), y algunos en los que, si no se equivoca, no serán posibles (juegos de turnos basados ​​en servidor).

En los problemas generales de la red como los están profundamente relacionados con la predicción que es un tema muy complicado en el mejor de y está muy bien explicado en el famous Valve article sobre él.

+0

Sé que simplemente encriptar el estado no va a funcionar, pero he visto algunos usos muy interesantes de la criptografía. Como comprobar el resultado de los votos sin saber quién votó qué o el cifrado que requiere que varias partes lo descifren. Quizás algo similar se puede usar aquí. Estos son bastante simples una vez que lo has visto, pero realmente es difícil descubrir cómo hacerlo. – stribika

+0

Me gusta el artículo que tiene muchos detalles sobre la compensación de latencia. – stribika

2

Malo red

Los jugadores con alta latencia debe comprar un nuevo módem. No creo que sea una buena idea agregar aún más latencia porque una persona en el juego tiene una mala conexión. O si se refiere a diferencias menores de latencia, ¿a quién le importa? Solo hará las cosas más lentas y complicadas si se rehúsa a FCFS.

Trampa: aimbots y similares

Se puede realmente hacer un software anti-trampas que funciona? No, no puedes. No puede saber si están ejecutando su programa u otro programa que actúe como el suyo.

trampa: el acceso a la información

Si usted tiene una conexión segura con un servidor dedicado que puede confiar, a continuación, hacer trampas, como ver más de lo permitido estado, debería ser imposible.

Hay algunos juegos donde la criptografía puede evitar hacer trampa. Juegos de cartas como el póquer, donde cada jugador tiene la oportunidad de "barajar el mazo". Detalles en wikipedia: Mental Poker.

Con un RTS o FPS, podría, en teoría, encriptar su parte del estado del juego. Luego, envíelo a todo el mundo y solo envíe las claves de descifrado de las partes que pueden ver o cuando pueden verlas. Sin embargo, dudo que en 2010 podamos hacer esto en tiempo real.

Por ejemplo, si quiero verificar que efectivamente podría estar en la ubicación B. Entonces, necesito saber de dónde vino y cuándo estuvo allí. Pero si ya me lo dijiste, sabía algo que no podía saber. Si me dices después, puedes decirme cualquier cosa que quieras que crea. Podrías haberme dicho antes, encriptado, y darme la clave de descifrado cuando necesito verificarlo. Eso significa que tendrás que encriptar cada movimiento que hagas con una clave de cifrado diferente. Ay.

Si no está implementando un sitio de póquer, las trampas no serán su mayor problema de todos modos.

+1

No se trata solo de los nuevos módems. La distancia física al servidor contribuye también, también lo hace el ISP. Está claro que necesitamos un límite sobre la latencia que estamos dispuestos a agregar. Un jugador con un RTT de 5 segundos no podrá jugar sin importar qué, por qué arruinar el juego para el otro 5. Pero (dependiendo del juego), la latencia es aceptable. En los juegos de FPS la latencia aceptable es muy baja y la tolerancia para las diferencias es muy baja (quién disparó primero importa mucho). En otros juegos, las tolerancias son mayores para ambos. Creo que si puedes mantener la latencia aceptable, podrías hacerlo igual. – stribika

+0

Creo que estoy de acuerdo en que los aimbots son inevitables. Sin embargo, los que vi son ciertamente detectables, no juegan nada como un ser humano. Por supuesto, se puede ajustar ... – stribika

+0

+1 para la primera propuesta inteligente que he leído sobre la inscripción en los juegos, gg! –

2

El servidor no puede simplemente procesarlos FCFS porque eso es injusto para los jugadores con mayor latencia.

Sí, puede. Intentar adivinar exactamente la latencia que tiene alguien no es más justo ya que la latencia varía.

En ese caso, intentan estimar el estado del juego en función de la información que ya tienen. ¿Cómo se puede saber si el estado estimado es correcto o no después de que la conexión vuelva a funcionar?

El servidor no tiene que adivinar en absoluto: conoce el estado. El cliente solo tiene que adivinar mientras la conexión está inactiva: cuando se realiza una copia de seguridad, se le enviará el nuevo estado.

En los juegos MMO, el servidor maneja una gran cantidad de clientes. ¿Cuál es la mejor forma de distribuir la carga? ¿Basado en la ubicación en el juego?

No hay una "mejor manera". Sin embargo, la partición geográfica funciona bastante bien.

¿Puede evitar enviar todo a través del servidor?

Solo para comunicaciones no confiables, que generalmente tienen un ancho de banda tan bajo que no tiene sentido.

En la mayoría de los juegos de RTS, si un jugador deja a los demás, puede seguir jugando sin él. ¿Cómo es posible sin un servidor dedicado? ¿Todos saben el estado completo?

Muchos juegos de RTS mantienen el estado completo simultáneamente en todas las máquinas.

Algunos de los problemas anteriores son fáciles en un entorno de cliente de confianza, pero eso no se puede asumir.

La mayoría de los juegos abiertos al público necesitan asumir un entorno 100% tramposo.

1

Con mucha gente accediendo a juegos en dispositivos móviles, una "mala red" puede ocurrir cuando un jugador se encuentra en un área de mala recepción o está conectado a una conexión de wifi lento. Por lo tanto, no es solo un problema de personas que se conectan en áreas escasamente pobladas. Con los clientes móviles, las "redes malas" pueden ocurrir muy a menudo y, por lo general, es extremadamente difícil de diagnosticar.

UDP da como resultado la pérdida de paquetes, pero incluso los juegos que usan TCP y HTTP pueden experimentar problemas donde la comunicación del servidor & se ralentiza mientras se verifica que los paquetes se han enviado. Con la comunicación, la compensación UDP para la pérdida de paquetes depende de lo que contengan los paquetes. Si está hablando de datos de movimiento, generalmente si no se reciben paquetes, el servidor interpola la trayectoria anterior y realiza un cambio de posición. Por lo general, es una costumbre del juego cómo se maneja, y es por eso que las personas a menudo evitan UDP a menos que su tipo de juego lo requiera. A menudo, para manejar una latencia de red alta, los juegos con problemas degradarán automáticamente la cantidad de funciones disponibles para los usuarios, de modo que aún puedan interactuar con el juego sin causar que el usuario reciba una patada o experimente demasiadas características rotas.

Optimally desea tener una herramienta de registro como Loggly disponible que puede ayudarlo a encontrar errores relacionados con la mala conexión y latencia y mostrarle las condiciones en los clientes y el servidor en el momento en que ocurrieron, esta visibilidad le permite diagnosticar problemas comunes los usuarios experimentan y desarrollan estrategias para abordarlos.

Jugadores que salen La mayoría de los juegos en estos días tienen servidores dedicados, por lo que este problema es casi irrelevante. Sin embargo, a veces sí, el servidor se puede cambiar a otro cliente.

Engaño Es extremadamente difícil anticipar cómo los jugadores harán trampa y crearán un sistema a prueba de trampas que nadie puede hackear. En la actualidad, muchas estrategias de detección de trampas se basan en el análisis heurístico de los datos de información de logging y de análisis del comportamiento para detectar anomalías cuando ocurren y marcarlas para su revisión. Definitivamente deberías tratar de hacer trampa a la medida que sea razonable, pero también necesitas un sistema de detección temprana que pueda detectar nuevos defectos que las personas están explotando.

Cuestiones relacionadas