2011-08-24 10 views
16

Planeo crear un juego de estrategia en tiempo real basado en WebGL, donde los jugadores puedan jugar juntos. Usaré Node.js para crear el servidor del juego, y websockets para conexiones en tiempo real.Estrategia Game Server Concept

He roto mi opinión sobre cuál sería el mejor concepto para sincronizar a los clientes.

Una posibilidad sería enviar solo las órdenes de los usuarios (unidades móviles, edificios, etc.) al servidor, que las envía a todos los demás clientes. Pero aquí, tengo el problema de la demora. Creo que los juegos se pondrían asincrónicos de esta manera.

Otra posibilidad sería calular el juego en el servidor. Los clientes todavía envían las instrucciones al servidor, pero el servidor envía ahora todos los estados cambiados de todas las unidades & edificios a los clientes en un intervalo alto. El problema es aquí la gran cantidad de datos y qué tan rápido puede ser ...

¿Tiene alguna otra idea o propuesta de mejora?

Gracias!

Respuesta

20

Básicamente tiene que decidir entre velocidad vs seguridad.

Dejar que el cliente haga el trabajo y los cálculos son más rápidos, pero los datos están en riesgo porque el cliente puede manipular los datos.

Por otro lado, hacer que el servidor haga todo el trabajo es más lento pero la información es más segura.

Puede optar por un enfoque dual, decidir dejar que el cliente calcule solo algunos datos, sincronizar y luego verificar su validez, y dejar que el resto se ejecute en el servidor.

También depende de lo rápido que se ejecuta el juego, la cantidad de datos para calcular la velocidad de la banda del servidor y/conexiones, etc ...

Debe crear prototipos de ambos métodos y probar algunas pruebas para emular el cliente y los servidores cargan.

Si el juego es pequeño, optaría por un trabajo más del lado del servidor. Por otro lado, para un juego mucho más complejo, probablemente sea mejor compartir más trabajo con el cliente. De todos modos, creo que siempre se necesita una compensación.

Éstos son algunos enlaces que pueden ser de utilidad

Multiplayer Game Programming Introduction

Real time strategy networking

Multiplayer Programming thread (old but still with many useful links)

Lag Compensation

Prevent Multiplayer Cheating

El primer enlace me ha ayudado mucho en los últimos días y todavía soy uno de los mejores recursos disponibles sobre el tema.

Libros

Multiplayer Game Programming

1

Lamentablemente no tengo experiencia en los juegos en línea basados ​​en WebGL, pero generalmente es un buen enfoque para permitir que la lógica del juego se ejecute en el lado del cliente y sincronizar los resultados.

En este enfoque, es importante hacer un seguimiento de qué objeto del juego es "propiedad" de qué cliente. Los clientes solo envían actualizaciones (creación, actualización, eliminación) de sus propios objetos y reciben las actualizaciones de los otros objetos del juego de los otros clientes.

Además, puede configurar un marco de mensajes para enviar mensajes adicionales como "El jugador ha ingresado/dejado" o algo así.

Este concepto ha demostrado ser útil para un juego que he creado, y espero que sea tan útil para ti.

0
No

seguro acerca de WebGL, pero a mi entender siguiente enfoque será bueno.

  1. inicializar todos los objetos (que son comunes a los jugadores en el servidor) y ejecutarlos
  2. En el arranque del cliente, se solicitará toda procesador (relacionada con clientes específicos) para los objetos que se ejecutan en el servidor.
  3. cliente representará los objetos en la interfaz de usuario para todos los procesadores recibidos.
  4. Cuando el cliente realiza alguna actualización en la interfaz de usuario, los cambios se notificarán al servidor y el servidor actualizará el objeto
  5. Cuando los objetos comunes entre jugadores son modificados por un jugador, cada jugador (cliente) recibirá una notificación para hacer la interfaz de usuario cambios.

Este enfoque será específico para objetos comunes y no para objetos específicos de UI/cliente.

1

usted debe tener el estado del juego y la lógica en el servidor De lo contrario, tu juego quedará abierto a trampas. El servidor es la máxima autoridad en el estado del juego.

0

Por razones de seguridad, toda la lógica debe estar en el lado del servidor, y toda la actualización de datos está en el servidor.

Pero el cliente puede predecir algo de lógica y reproducir animación primero, lo que se denomina predicción del cliente.

El lado del servidor está a cargo de verificar la lógica del cliente, si no hay trampa, todo está hecho. Si alguien hace trampa, el servidor puede decirle al cliente que regrese al estado correcto.

Si está utilizando node.js para el servidor, hay un marco de código abierto, pomelo. Y también hay una demostración de código fuente completo y demostración en línea para él: lordofpomelo