Simular una conexion uno a muchos entre un proceso externo y un grupo de procesos en un sistema distribuido utilizando sockets TCP. Esto se conoce como una comunicacion de grupo abierto.
Se cuenta con una arquitectura de cliente externo - servidor de grupos - coordinador de grupos - grupo. El cliente externo se comunicara con un grupo de proceso y para ello envia el numero de grupo a conectarse al servidor de grupos, este le responde con la direccion y puerto del coordinador del grupo al que tiene que conectarse. Al conectarse al coordinador, le envia el mensaje que quiere hacer llegar a los miembros del grupo. El coordinador distribuye el mensaje entre los miembros del grupo, recibiendo un paquete ACK (Acknowledgment) por cada miembro para confirmar la recepcion. Una vez confirmados todos los paquetes, se envia un ACK al cliente externo confirmando el envio exitoso del mensaje a todos los miembros del grupo.
Encargado de gestionar el redireccionamiento del cliente externo al respectivo coordinador del grupo. Recibe numero de grupos y devuelve direccion y puerto del coordinador.
Encargado de gestionar el grupo de procesos. Recibe mensajes de clientes externos para hacer multicast a los miembros de su grupo, devolviendo ACK de confirmacion al cliente externo.
Encargado de asignar un nuevo cliente interno a un grupo. Recibe solicitudes de asignacion y devuelve la direccion y puerto del coordinador del grupo al que fue asignado.
Proceso que se conectara con el coordinar para ser parte de un grupo y recibira mensajes de clientes externos.
Proceso que se conectara, en primera instancia con el servidor de grupos, luego al coordinador de grupos y enviara mensajes a los miembros de un grupo.
Esta pensado para ejecutar directamente en la terminal usando node o el equivalente en el entorno de ejecucion de javascript de preferencia (se utilizo bun particularmente). se propone una "interactividad" en el cliente externo donde podra elegir a que grupo enviar y el contenido de los mensajes.
- En la primera terminal, ejecuta el servidor:
node server.js
- En la segunda terminal, ejecuta un cliente interno, que sera una aplicacion que sera asignada a un grupo, y la aplicacion se conectara e su coordinado de grupo asignado. Esto puede repetirse tantas veces como aplicaciones en grupos desee tener.
node internalClient.js
- En la tercera terminal, ejecuta un cliente externo, esta sera una aplicacion externa que se querra comunicar con algun grupo para enviarle un mensaje a todos los procesos miembros del grupo.
node externalClient.js
