Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API Clima em Tempo Real com WebSockets

Um painel (dashboard) de clima em tempo real construído com Spring Boot e WebSockets. O sistema busca periodicamente os dados climáticos de uma lista de cidades (no estado de Goiás) e atualiza os clientes conectados instantaneamente, sem a necessidade de recarregar a página.

🚀 Tecnologias Utilizadas

  • Backend: Java 21, Spring Boot, Spring WebSockets (STOMP), RestTemplate.
  • Frontend: HTML, CSS, JavaScript (Vanilla), SockJS, Stomp.js.
  • API Externa: wttr.in para obter os dados climáticos reais em formato JSON.

⚙️ Como rodar o projeto

Pré-requisitos

  • Java 21 instalado em sua máquina.
  • Porta 8080 livre.

Passos para execução

  1. Abra um terminal na pasta raiz do projeto (api-clima-real-websockets).
  2. Execute o projeto usando o Gradle Wrapper embutido:
    • No Linux/macOS:
      ./gradlew bootRun
    • No Windows:
      gradlew.bat bootRun
  3. Aguarde o Spring Boot baixar as dependências e iniciar o servidor na porta padrão 8080.
  4. Abra o seu navegador e acesse a página do Dashboard:
  5. Clique no botão Conectar para que o Dashboard inicie a conexão com o servidor e comece a receber os cards climáticos das cidades.
  6. (Opcional) Clique em Parar para desconectar; o servidor detectará que não há clientes conectados e interromperá as requisições à API externa para economizar recursos.

🔄 Fluxo de Mensagens (WebSockets)

O projeto utiliza o padrão Pub/Sub (Publish/Subscribe) por meio do protocolo STOMP rodando sobre WebSockets, facilitado pelo SockJS.

  1. Conexão:
    • Quando você clica em "Conectar", o frontend (via JavaScript) inicia uma conexão WebSocket com o servidor no endpoint configurado: /ws-clima.
    • O ClimaScheduler no servidor possui um ouvinte (@EventListener) que detecta a nova conexão e incrementa o número de clientes ativos.
  2. Inscrição (Subscribe):
    • O cliente se inscreve no tópico /topic/clima para começar a escutar as transmissões que o servidor enviar para este "canal".
  3. Busca e Processamento (Scheduler):
    • O ClimaScheduler é acionado automaticamente a cada 5 segundos.
    • Primeiro, ele verifica se existe alguém conectado. Se a contagem for 0, ele encerra a execução silenciosamente.
    • Caso haja clientes, ele obtém uma cidade não repetida do CidadeRepository.
    • Em seguida, chama o ClimaService, que utiliza o RestTemplate para fazer uma requisição REST (HTTP GET) na API pública wttr.in e mapeia a resposta para a temperatura em Celsius e a descrição do clima.
  4. Envio (Publish):
    • Os dados são empacotados em um objeto ClimaDTO, que também adiciona a hora local da requisição.
    • O SimpMessagingTemplate converte este objeto em JSON e faz o disparo (broadcast) para a rota /topic/clima.
  5. Recepção e Exibição:
    • Todos os navegadores conectados e inscritos recebem o JSON em tempo real.
    • A função JavaScript recebe os dados e cria um novo card visual na tela. A cor do card muda dinamicamente dependendo do nível de temperatura (frio, ameno ou quente).

📸 Demonstração do Sistema

Tela Inicial

Tela Inicial

Aplicação Conectada

Aplicação Conectada

Terminal Enviando Clima

Terminal Enviando Clima

Aplicação Desconectada

Aplicação Desconectada

Terminal ao Desconectar

Terminal ao Desconectar

About

Dashboard de clima em tempo real construído com Spring Boot e WebSockets (STOMP), consumindo dados meteorológicos e enviando atualizações instantâneas para os clientes conectados.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages