Estructura Del Servidor - Una Idea

Prefacio

EsquemaIdeaServidor.png

Esto es una primera idea que he ido dando vueltas en la cabeza sobre como podemos enfocar el servidor de juegos de manera que sea totalmente modular y que permita trabajar en paralelo para que Gervás no nos corte las pelotas. Por supuesto se admiten sugerencias, cambios o decir que es una mierda (con argumentos por favor). Las descripciones pueden contener referencias a determinadas tecnologías (intentaré colocar enlaces y documentos a las mismas para que todos podamos saber de que van) pero no hay nada fijo. Vamos que es un boceto.

Descripción

El servidor de juegos es la aplicacion sobre la que gira todo el proyecto. Debe proveer a los juegos de las funcionalidades necesarias en temas de conectividad de red. acceso a la base de datos, servicio de chat para dentro de las partidas y cualquier otra cosa que veamos necesaria. A grandes rasgos constaría de una aplicación de consola Java (es decir sin interfaz gráfico, para configuración ya comentaré algo después) con una funcionalidad muy limitada: cargar módulos con funcionalidad independiente que juntos cubren todos los aspectos de la aplicación. La otra parte por supuesto serían los módulos que la conforman y sus posibles dependencias.

¿Y que coño es un módulo?

A grandes rasgos es un paquete .jar de Java, conteniendo las clases necesarias para cubrir una funcionalidad concreta del servidor y un fichero de manifiesto que describe aspectos del módulo tales como su nombre, su versión y de qué otros módulos puede depender. Durante la fase de inicio del servidor, éste es capaz de cargar en orden correcto todos los módulos especificados en su fichero de configuración de forma que se respeten las dependencias. No vale cualquier combinación de clases en un .jar como módulo, es necesario que cumpla unos requisitos que de momento son estos:

  • Debe contener un fichero de manifiesto modificado de acuerdo a una sintaxis determinada que describa nombre, versión y dependencias del módulo, así como un nombre de clase que se usará para iniciar el módulo
  • Debe contener una clase inicial con métodos para permitir la inicialización del módulo y que deberá facilitar de alguna manera una instancia de la clase principal del módulo ya inicializada y lista para ser usada por el resto de módulos
  • La clase principal debe soportar algun mecanismo para preservar el estado actual del módulo así como otro mecanismo para, a partir de un estado previamente salvaguardado ser capaz de restaurarse a si misma. Esto es necesario para el añadido "en caliente" de nuevos módulos asi como para la actualización de versiones sin tirar abajo el servidor.También deberá tener métodos para el cierre y liberación de recursos del módulo así como para cambiar las opciones de ejecución del mismo.
  • Una página dinámica segun la tecnología que usemos para el portal (PHP,JSP,…) usada para configurar.

Como módulos ahora mismo planteo los siguientes (sientanse libres para añadir más):

  • Módulo de Comunicaciones
  • Módulo de Chat
  • Modulo de Acceso a Bases de Datos
  • Módulo de Identificacion
  • Módulo de Configuración
  • Modulo Factoría de Juegos

¿Por qué una aplicación de consola? Y configurarlo entonces … ¿cómo?

El motivo para elegir una aplicación de consola en vez de un interfaz bonito de tipo Swing lleno de botones, listas y ventanucos es que, al ser una aplicacion orientada a residir en un servidor con escasa intervención humana, no hace práctico el uso del GUI e incluso es posible que el servidor no tenga soporte de servidor gráfico instalado. Como solución se propone usar una página dinámica incluida en cada módulo que accediendo al modulo de configuración a través del de comunicaciones (vamos, una conexion TCP) sea capaz de proporcionar a cada módulo sus parámetros de ejecución. Por supuesto estos cambios no deberan ocasionar salvo cuando sea imprescindible un reinicio del sistema. Hay que recordar que esto siempre se refiere a la parte SERVIDOR del proyecto. Ningún usuario tendrá que verselas jamás con cosas como una ventana negra de comandos, para el jugador todo serán páginas webs y applets java.

Epílogo

Bueno una vez llegados aquí se puede uno preguntar… "¿y en 3 parrafos me dices todo el servidor?".Y la respuesta es sí, pero no. Sí puesto que el servidor a un nivel muy alto no es nada mas que un cargador de otras liberías. El no es que evidentemente aquí no se ha hablado de ninguna funcionalidad en absoluto. Estas funcionalidades irán siendo añadidas en la documentación respectiva de cada módulo del servidor en un nivel todo lo detallado que sea necesario (que va a ser MUY detallado).