Modulo De Comunicaciones - Estructura

Introducción

Aquí se va a describir a grandes rasgos la estructura interna del módulo de comunicaciones y su funcionamiento.

¿Qué es?

El módulo de comunicaciones es uno de los módulos cargables por el programa servidor y es el encargado de gestionar las comunicaciones TCP del servidor con el exterior. Su infraestructura ha de permitir la conexión de múltiples usuarios simultaneamente, sin bloquear la ejecución del resto de componentes del servidor. Así mismo debe ser capaz de discriminar los distintos mensajes que le lleguen segun su módulo destinatario , ejerciendo así de "oficina de correos para mensajes del servidor".

Construcción del módulo

El módulo se construye en torno a una librería llamada QuickServer que permite satisfacer las necesidades multiusuario de nuestra aplicación en tema de comunicaciones con un alto grado de sencillez. Ésta librería nos abstrae (al menos a nivel de servidor) de la parafernalia de los sockets así como de su uso en modo no bloqueante (bien mediante NBIO o mediante Threads) limitando las acciones que tenemos que realizar a:

  • Darle unos parametros de inicio (como el puerto que va a escuchar)
  • Facilitarle el nombre de las clases que van a analizar los mensajes que recibamos (la parte con mas "gracia" del servidor)
  • Mandarle arrancar

Esto nos permite centrarnos más en que nuestro servidor haga lo que debe y menos en que no reviente por problemas de hilos o de sockets (en la parte de comunicaciones al menos)

¿Oficina de correos?

Como se ha comentado antes el módulo servidor debe dar soporte al resto de módulos en lo que se refiere a conectividad por internet. Obviamente cada modulo puede tener unas necesidades de comunicación diferentes y estructuras de datos diferentes para enviar/recibir. Por supuesto un módulo no sabe como desentrañar los datos dirigidos a otro, lo que nos fuerza a asegurarnos de que los mensajes llegan a quien deben solamente. Esto se logra en dos partes:

  • Haciendo que los mensajes de cualquier módulo tengan una apariencia externa "común" que permita al servidor preprocesarlos, esto es mediante la definición de un protocolo adecuado
  • Incluyendo algún sistema que permita discriminar el destinatario del mensaje

Las cuales se describen a continuación.

El protocolo básico del módulo servidor

El protocolo tiene su sección propia: Protocolo

Sistema de acople de los módulos con el módulo de comunicaciones

Para lograr una correcta distribución de los mensajes necesitamos un método para identificar su destintario (o destinatarios como veremos). Esa idea queda expresada en el campo "Identificador de Protocolo" de los metadatos de un mensaje, que permite asociar un protocolo con un mensaje. Los distintos módulos pueden indicar al servidor que van a usar un protocolo suyo propio y que por tanto los mensajes entrantes de ese protocolo les deben ser remitidos. Más de un modulo puede asociarse a un protocolo (por ejemplo se puede tener un modulo logger que recopile estadísticas de uso de mensajes del resto de protocolos y que por tanto debe recibir los mensajes de todos). Como esto queda un pelín raro asi contado pongo un diagrama que espero que no confunda aún más.

DistribuidorMensajes1.png
DistribuidorMensajes2.png