Simulador de Trânsito Urbano Distribuído
Motor de simulação de trânsito urbano distribuído multi-processo em Java com 10 nós JVM independentes a comunicar por sockets TCP nativos, concorrência multi-thread, políticas adaptativas de semáforos, algoritmos de encaminhamento dinâmico e dashboard gráfico em Swing a 20 FPS.
Simulando trânsito urbano com nós distribuídos multi-processo.
Desenvolvido para a unidade curricular de Sistemas Distribuídos do Politécnico do Porto, este sistema simula o fluxo complexo de veículos (Motos, Carros, Camiões) numa rede urbana com múltiplos cruzamentos, onde cada componente executa como um processo independente do sistema operacional em JVMs separadas.
A solução implementa comunicação Cliente-Servidor via sockets TCP com serialização de envelopes de mensagens, estruturas de dados concorrentes (ConcurrentLinkedQueue, AtomicLong), threads dedicadas para semáforos e um dashboard gráfico desktop em Java Swing com animações de mapa a 20 FPS em tempo real.

Animação de mapa interativo em tempo real a 20 FPS desenhado em Java Swing com rastreio de posições dos veículos
O Problema & Desafios Chave
A simulação de trânsito urbano de elevada densidade exige a coordenação de componentes de rede distribuídos sem pontos únicos de estrangulamento, garantindo o acompanhamento preciso dos veículos, formação de filas e ciclos semafóricos.
O sistema desacopla a geração de veículos (EntranceProcess), o processamento de filas e semáforos (IntersectionProcess), o registo de destinos (ExitProcess) e a visualização em tempo real (Coordinator) ao longo de 10 processos independentes.
- Coordenação de 10 processos JVM concorrentes sobre sockets TCP customizados sem perda de mensagens nem condições de corrida
- Conceção de um envelope de serialização binária TCP suportando 11 tipos distintos de eventos e mensagens de métricas
- Implementação de políticas adaptativas de semáforos em tempo real calculando a densidade de filas (AdaptiveDensityPolicy) e tempos de espera (AdaptiveWaitTimePolicy)
- Desenvolvimento de algoritmos de encaminhamento dinâmico de veículos baseados em filas (QueueBasedRoutingPolicy) com cache local de métricas
- Construção de um dashboard gráfico interativo e analítico a 20 FPS em Java Swing puro (Graphics2D) sem bibliotecas externas
Arquitetura & Decisões Técnicas
Arquitetura distribuída multi-processo com 10 nós JVM independentes comunicando via Sockets TCP utilizando serialização de objetos Java e protocolo de envelope personalizado.
- Isolamento real de processos: falhas num nó não causam falha em cascata, mimetizando nós distribuídos reais
- Comunicação assíncrona por sockets TCP evita o bloqueio do fluxo de veículos entre cruzamentos
- Threads dedicadas para controlo de semáforos garantem temporização precisa independente do I/O de rede
- Coordenador centralizado agrega métricas e desenha a GUI a 20 FPS sem alterar a lógica da simulação
Stack Tecnológica & Infraestrutura
Diagramas e Interfaces do Projeto

Animação de mapa interativo em tempo real a 20 FPS desenhado em Java Swing com rastreio de posições dos veículos

Diagrama de arquitetura distribuída mostrando 10 processos JVM interligados por Sockets TCP

Dashboard de métricas em tempo real apresentando filas por direção, distribuição de veículos e gráficos em Graphics2D