2012-04-06 14 views
6

Actualmente estoy trabajando con el lado del servidor Java y el lado del cliente as3. Me pregunto si hay una bala de plata para sincronizar el reloj entre ellos. Entre la latencia variable y las velocidades de reloj variables, parece que cada paquete necesitaría una marca de tiempo.¿Sincroniza tiempo/eventos entre el cliente y el servidor del juego (MMORPG)?

Gracias!

+0

NTP o una variante de eso? – Thomas

+0

@Thomas Eso es bueno para los tiempos del sistema, pero esto es más una cuestión de sincronización y latencia del evento y evitar que el cliente haga trampas o haga que [increíble] información imprecisa, etc. –

+0

haga su modelado tanto del lado del servidor como del lado del cliente. limitar la entrada del cliente a la de un mouse y teclado. nunca puede obtener el 100% de precisión con el tiempo y tendrá que hacer estimaciones y realizar acciones correctivas graduales. – dqhendricks

Respuesta

0

No, no hay una bala de plata. Tendrás que improvisar. La marca de tiempo es una buena idea. Además, trate de mantener al mínimo el cálculo realizado en el servidor. No simule cosas irrelevantes. Solo las cosas que cree que romperán su lógica de juego. Permita que los clientes calculen el resto y solo transmitan los resultados a sus suscriptores. .

2

Esto está fuera de mi cabeza, sin ningún código.

  1. Ponga el código en el servidor y el cliente para enviar y recibir un ping.
  2. Envía un ping desde el cliente al servidor cada vez que el cliente se conecta.
  3. Registre la hora actual como hora de envío.
  4. Cuando el cliente recibe el ping, registre la hora actual a la hora de recepción.
  5. Obtenga la demora de tiempo restando el tiempo de recepción por el tiempo de envío y divídalo por 2.
  6. Haga que el servidor envíe la hora actual al cliente.
  7. Reste la diferencia de tiempo del servidor de hora enviado.
  8. Establecer el tiempo de cliente a la vez desde el paso 6.

No estoy seguro de si esto va a funcionar al 100% con precisión, pero espero que esto ayude!

+1

Sí, creo, esta es la forma correcta. Conceptualmente, debe almacenar marcas de tiempo en cada uno de los clientes y en el servidor. Y ajuste el tiempo en cada uno de ellos conociendo el tiempo de compensación. –

Cuestiones relacionadas