Cómo funciona (pelín técnico)

Artículos en plan blog acerca de temas relacionados con ogArena, aunque no tan importantes como para estar en los apartados principales. Digamos, para curiosos.
Responder
asturcon3
Site Admin
Site Admin
Mensajes: 6211
Registrado: 12 Nov 2007 14:36
Alianza: aSACo, ofcourse

Cómo funciona (pelín técnico)

Mensaje por asturcon3 »

Acerca del funcionamiento y componentes de ogarena, que tengo un ratillo tonto.
Imagen

El server del juego es un pc doméstico, como bien sabéis.

A este server le llegan las órdenes de los jugadores por su navegador.

Estas órdenes son recibidas por el servidor web, un apache ejecutando php con eaccelerator.

El php de las páginas filtra la información de entrada, comprueba una serie de cosas (sesión válida, limpieza etc) y envía la petición a la base de datos.

La base de datos es Oracle XE, la versión gratuíta de la versión 10 de Oracle. Está recortada, pero su capacidad es más que suficiente para gestionar este juego, aunque echo de menos algunas cosas como por ejemplo el particionado. Bueno, da igual.

Uno de los puntos fuertes de Oracle es que permite programar dentro de la base de datos, es decir, hacer funciones que accedan y actualicen toda la información necesaria internamente sin andar trasegando entre el php y la base de datos como ocurre con el MySQL. De hecho, la inmensa mayoría del juego son pantallas cuyo php hace una única llamada a la base de datos pasando la información requerida.

El caso es, el procedimiento en cuestión hace lo que tenga que hacer según los parámetros de entrada y devuelve una cadena de caracteres que son todos los datos para dibujar la pantalla del jugador.

El php recibe esa cadena y la mete en un html que genera, donde viene la referencia a las hojas de estilo y scripts necesarios, y la devuelve al navegador del jugador.

El navegador recibe todo eso y ve las referencias a los script y hojas de estilo. Estos ficheros son fijos (mientras no los edite a mano) así que en lugar de tenerlos en el servidor del juego, los tengo en un hosting, el mismo que el foro. El motivo es que al ser fijos no necesitan información del juego, y el hosting tiene mucho mejor conexión que la que tengo yo en casa.

El navegador cuando tiene el script de la pantalla lo ejecuta, pasándole la cadena de datos que recibió del server del juego. El script parte la cadena en cachos, los interpreta y dibuja contenido en la ventana del navegador combinando el diseño de las pantallas más los datos de la cadena.

Por ejemplo, algo que devuelve siempre el server en esa cadena es la lista de colonias del jugador, todas seguidas y con un separador: colonia1,colonia2,colonia3,... El script parte esos datos para saber el nombre de cada colonia y con eso crea un desplegable en tu navegador, y si tienes el diseño nuevo activo te crea pestañitas, y sabiendo en cuál estás ahora (otro dato de la cadena) te pone los botones de colonia anterior/siguiente...

Así que con una cadena lo más corta posible de datos que van por mi lenta conexión adsl, tu navegador la combina con un script que no está en mi lenta conexión, y genera un montón de dibujillos en tu navegador.

Y todo con el objetivo de mantener lo que envía y recibe el servidor en la mínima expresión, típicamente apenas un K o dos, y así es como es posible llevar un juego de estos con un montón de jugadores con una conexión normalita.

Mención aparte merece el motor de batallas. Como ya he comentado en ocasiones, es un programa ejecutable... un programa más en el windows del server. Lo que hace este programa es consultar la primera flota que tiene que llegar a destino. Si le quedan más de 10 segundos, se duerme 10 segundos y vuelve a probar. Si le quedan menos de 10 segundos, espera ese número de segundos y vuelve a probar. Cuando está consultando y efectivamente llega una flota en ese instante, si es cualquier cosa menos una batalla, llama a una función de la base de datos que hace lo que tenga que hacer la misión esa. Si es una batalla, llama a una función que le devuelve un tocho de caracteres que contiene todas las naves, defensas, tecnos... que participan en la batalla y se lía a ejecutarla. Cuando acaba, llama a otra función pasándole el resultado de la batalla. Y vuelta a empezar.

Así que... ¿por qué un server doméstico?
-Porque me permite usar Oracle en lugar de MySQL, y eso es *mucho* mejor.
-Porque me permite tener un programa ejecutable mío que haga las batallas. Ningún hosting barato me permitiría poner un .exe que puede requerir 2 ó 3 GB de RAM para funcionar.

¿Y por qué las batallas en un .exe? Pues porque me permite tener el motor de batallas programado en C++, un lenguaje de programación de lo más eficiente, que permite que este sea el único juego aparte de ogame que tiene un motor de batallas razonable, y con una cantidad de naves muy superior a las del propio ogame.

Y ¿por qué un hosting externo?
- Porque me permite meter un foro
- Porque me permite tener fuera del server del juego todas las imágenes, estilos y scripts que son pesados, necesitan una buena conexión para entregarse rápido, y si estuvieran en el server de casa tendría mi ADSL reventado subiendo esas imágenes. no sería jugable.

Aunque todo esto conlleva algunas complicaciones. Por ejemplo, las firmas dinámicas. En ogarena, las firmas se generan en el server del juego cuando toca (creo que una vez diaria) y se suben por FTP al server externo, que es donde están para que vosotros las useis. Porque si las tuviera en el server del juego y a alguien se le ocurriera poner su firma en taringa, el server se moriría xD

O por ejemplo, los avatares. Cuando tú pones la ruta de imagen para usarla como avatar, el server del juego descarga la imagen, la reescala al tamaño con el que se van a usar, la guarda y la sube por FTP al server externo, de donde se mostrará al resto de jugadores. Esto es mucho más complicado que lo que hacen otros juegos (que es simplemente pasar el enlace que tú has dado) pero permite que no haya avatares lentos que ralenticen las vistas de galaxia, y que no haya imágenes rotas etc.

Y con esto y un bizcocho, hasta la próxima :)
Adjuntos
montaje.png
(6.38 KiB) No descargado aún
Imagen
JaviStark
Mensajes: 4722
Registrado: 01 Dic 2008 11:41
Ubicación: UniRealidad,

Re: Cómo funciona (pelín técnico)

Mensaje por JaviStark »

:O, interesante, siempre intente imaginarme como estaba diseñada la aplicacion pero no me esperaba un sistema distribuido aunque en verdad tiene sentido, casi ningun hosting gratuito ofrece nada por encima de MySQL. Por cierto (si no es confidencial) como evitas al tipico listillo con un Scarab que intercepte los paquetes de datos? Validas de lado servidor y de lado cliente o algo asi?
asturcon3
Site Admin
Site Admin
Mensajes: 6211
Registrado: 12 Nov 2007 14:36
Alianza: aSACo, ofcourse

Re: Cómo funciona (pelín técnico)

Mensaje por asturcon3 »

Ten en cuenta que en el server externo no hay nada que dependa del jugador... toda la info que hay ahí es pública: las imágenes, los scripts, los skins. Todo lo personal y secreto está en el server interno.

EDIT: Y que cuando hablo de un script del servidor externo que recibe tus datos, me refiero a un javascript. El server externo le da a tu navegador el javascript, es tu navegador el que ejecuta ese script con tus datos... que nunca se envían al server externo.

Es decir, si has interpretado que colonia1,colonia2,... se le envían al server externo para recibir como respuesta html, no.

Tu navegador le pide el javascript al server externo, lo recibe y en local lo ejecuta con colonia1,colonia2 y con el resultado pinta la pantalla.

Tu lista de colonias la conoce el server interno y tu navegador. Al externo no le importa.
Imagen
Responder