martes, marzo 21, 2006

Aspectos de diseño, parte 1: Ancho de banda

Estoy llegando a los diagramas de clases para el Servidor (al menos en papel, todavia no los paso a Visio) y me he puesto a pensar en algo. Es cierto que sería lindo que el juego fuera en tiempo real y fuera más parecido a un ActionRPG que a un RPG por turnos, pero...

¿Cuanto ancho de banda consumiria eso en un servidor con digamos, 100 usuarios?
¿1000 usuarios?

La experiencia dice que para mantener el ancho de banda en un limite razonable se necesitaría:
1.- Limitar la frecuencia de las actualizaciones de las posiciones de los mob's y players, dependiendo del ancho de banda disponible. Eso produce un problema que es muy comun de ver en RO: El fenomeno de la teletransportación de los mounstros (no se en otros MMORPG por que no he jugado ninguno...Guild Wars? )
2.- Pasar parte de la pelota de la resolución de golpe al cliente. Esto funciona bien... en FPS's. En MMORPG's se presta para la aparición de cheats que te permitan pegar a distancias mayores de la permitida o acertar siempre. Es la aproximación que usan en parte Phantasy Star Online y Diablo 2. Diablo 2 solo almacenaba los players en sus servidores y la version original de PSO ni siquiera eso, lo que hacia posible unos Hacks terrorificos (onda el que no tiene un personaje de nivel 99 en el servidor de shthacks, es un perdedor).
3.- Hacer que el juego tenga una arquitectura distribuida tipo p2p... MUY Complejo, y está sujeto a los mismos problemas del punto 2. Es la aproximación que estaba tomando BANDAI NAMCO con .hack fragment, una de las arquitecturas mas raras que he visto para un ORPG... (no no es un MMORPG ya que el mundo no es persistente), en la que cada PC es un Area Server (con sus propios dungeons, etc) que responde a un Matching server central el que provee los servicios de guilds, tiendas, chat, pvp, validación y otros. Es muy parecido a Bit Torrent.
4.- Usar otra forma de juego como el juego por turnos (FFXI)... no es la idea.
5.- Limitar la cantidad de usuarios (TIBIA?). Lo mas chanta, aunque siempre debe estar esa posibilidad.
6.- Limitar la cantidad de jugadores que pueden entrar a un area en un momento determinado (World of Warcraft, creo...), o hacer que los quest sean solo para el grupo que los juega (Guild Wars por ejemplo, en que cada grupo de jugadores tiene su propio mapa privado o las quest machines de Anarchy Online que funcionan de manera similar). Notese que como consecuencia secundaria de esto se limita el "Kill-Steal", pero la jugabilidad no es tan realista (nunca te encuentras con otra persona fuera de las ciudades).
7.- Hacer un protocolo State-of-the-art que sea taaaan eficiente que pueda aguantar un flujo continuo de al menos 4 actualizaciones por segundo para cada conexion y en cada actualizacion pasar la posición de al menos 5 objetos (los numeros son discutibles, lo estoy calculando al ojo). Eso implica que el protocolo no puede estar basado en algo que tenga muchos descriptores (osea ni cagando XML).
Notese que tambien está el impacto en los Locks de cada uno de los objetos del servidor, especialmente el asunto de como los distintos hilos de ejecucion interactuan entre si (Datachannels anyone?).

Acepto sugerencias :)

6 Comments:

At martes, marzo 21, 2006 3:32:00 p. m., Blogger Leonard "Nik" Petit-Breuilh said...

Me hago un autoComentario:

Gamasutra: Articulo acerca de latencia en MMMORPG

Soluciones interesantes:

1.- Mandar los datos con paridad o solomon-reed para reconstruir las fallas. Asi se evita el tema de los reenvios y quizá se puede usar UDP.
2.- Reestructurar la forma en que se bloquean y se encolan las llamadas a objetos.

Mas coming soon...

 
At miércoles, marzo 22, 2006 10:05:00 p. m., Blogger J. said...

Numero 7, usando una base de datos tokenizada ,pseudobinaria, y redundante.. sería como usar xml, pero cada tag sería un token, y los datos deberían ser manejados a nivel de byte... sería compacto...

Ademas en una accion no cambian todos los valores (Bueee... lanzar la bomba termonuclear de chtulu sería una excepcion...).. solo se necesita transmitir una accion, recrearla matematicamente en el servidor y que el servidor haga la accion... y devuelva el resultado de la accion al cliente... en resumen... transmitir deltas.. El cliente se encarga de recrear la accion en pantalla. La informacion de los niveles, armas, etc no debería estar en el cliente... Pero el cliente debería ser capaz de enviar deltas... si sabes a lo que me refiero)

¿¿Por que tokenizada... ??compactacion.. no tienes que accesar un parser complejo/diccionario a la XML, y te ahorras poder de proceso.
¿¿Redundante??.. razones obvias... si falla un xml, es relativamente sencillo repararla... una base tokenizada no.

Lo que deja la tarea de generar un convertidor token->XML y XML - > Token... para propositos de permitir actualizaciones y modificaciones al sistema......

Creo que estoy fumando pasto demasiado verde...

J.

 
At viernes, marzo 24, 2006 11:21:00 a. m., Blogger Leonard "Nik" Petit-Breuilh said...

De echo, el protocolo que estaba pensando es uno basado en UDP en que toda la data se enviara de una sola vez (separada en Tokens) y con un código de reparación, quizá un Humming o un Solomon-reed o algo por el estilo para reconstruir los paquetes pifiados.

 
At viernes, marzo 24, 2006 11:25:00 a. m., Blogger Leonard "Nik" Petit-Breuilh said...

Ahora el estado del mundo y el estado de los mapas individuales se guarda en clases sincronizadas (osea con Lock) lo que significa que solo pueden ser accedidas por un usuario a la ves, eso para poder establecer una cola (el mecanismo de Threading de Java se encargaría de eso) y protegerlas (de accesos redundantes). La idea es que como tu dices, no hay casi eventos que afecten a más de un mapa, y el lock se mantendría solo sobre cada mapa en particular.

 
At viernes, marzo 31, 2006 4:45:00 p. m., Blogger Danziker said...

... ... ... ...
no entendi ni pelota... pero no importa... yo estoy en el otro lado del edificio, jugando a cuantas pelotas de ping pong puedo meterle al Keno por las oejas antes que empieze a hablar en zulustano...
esto de estar en el lado humanista de la fuerza... jejejeje

pasto verde... pasto verde... vacas verdes... enanos verdes... una Podadora!!! ...
los aviones son de bagdaaaaaad!!!

 
At viernes, marzo 31, 2006 5:36:00 p. m., Blogger Leonard "Nik" Petit-Breuilh said...

No te preocupes Rage, es solo una conversación de Geeks.

 

Publicar un comentario

<< Home