Pular para o conteúdo

Elevando o Nível do Dext: Monitoramento de Telemetria em Tempo Real com HTTP.sys e Server-Sent Events (SSE)

Dext AirFlow Dashboard

O desenvolvimento de aplicações web modernas com comunicação bidirecional em tempo real frequentemente direciona os desenvolvedores para plataformas como Node.js ou .NET Core com SignalR. No entanto, no ecossistema Delphi, o framework Dext demonstra que é possível obter performance extrema de nível empresarial rodando diretamente sobre a API nativa de kernel do Windows: o HTTP.sys.

Este artigo apresenta em detalhes o projeto exemplo Dext AirFlow (Control Tower), demonstrando como criamos um painel de controle aeroespacial tático em tempo real, os padrões arquiteturais de backend e frontend adotados, e por que a combinação de HTTP.sys nativo com barramentos de mensageria em tempo real representa o estado da arte para projetos de alta performance no Delphi.


Tradicionalmente, servidores web em Delphi dependem de sockets em modo de usuário (como Indy) ou servidores terceiros. O Dext muda isso ao fornecer uma abstração fina e de alto desempenho sobre o driver de kernel HTTP.sys (o mesmo motor por trás do IIS).

As vantagens dessa abordagem para aplicações em tempo real são expressivas:

  1. Roteamento em Kernel: Requisições HTTP de controle e negociação de conexões persistentes são recebidas e pré-processadas diretamente no Kernel do Windows, contornando a sobrecarga de alternância de contexto (Context Switching) comum em modo usuário.
  2. Compartilhamento de Portas: Várias aplicações podem escutar na mesma porta física (ex: :9000), desde que registrem caminhos de requisição distintos (URLs amigáveis) via HTTP.sys.
  3. Escalabilidade Nativa: O gerenciamento de conexões abertas de longa duração (como Server-Sent Events / EventSource) é feito pelo próprio kernel, liberando a aplicação para processar regras de negócio com baixíssimo consumo de CPU.

O AirFlow simula um centro de controle tático (Control Tower) que gerencia 40 drones de carga simultâneos. Ele demonstra a integração entre:

  • Um simulador de física e bateria rodando em threads em segundo plano no Delphi.
  • Um Hub de mensageria em tempo real que distribui atualizações de telemetria apenas para operadores conectados às regiões de interesse.
  • Uma interface web rica e responsiva com micro-animações, gráficos dinâmicos de consumo e controles bidirecionais interativos.

Veja abaixo o simulador e o painel de telemetria em ação:

O backend é modular e estruturado em torno do conceito de threads isoladas e endpoints HTTP rápidos:

Dext AirFlow Architecture

O simulador (TSimulatorThread) roda de forma assíncrona, atualizando a física de voo (Latitude, Longitude, Heading, Velocidade e Bateria) de 40 drones a uma taxa de 5 updates por segundo (5Hz).

  • Thread-Safety: Utiliza um array de comandos síncronos protegido por seção crítica (TCriticalSection) para receber comandos de controle vindos da thread do servidor HTTP.sys sem causar condições de corrida (race conditions).
  • Envio Eficiente de Telemetria: A cada iteração, as informações são formatadas e enviadas para o Dext Hub usando a interface IHubContext. Os operadores recebem apenas a telemetria da região que estão monitorando (filtragem por grupos SignalR-like).

O servidor Dext expõe rotas táticas simplificadas usando uma sintaxe fluente e expressiva:

// Endpoint para acionar comandos de retorno à base (RTL)
App.Builder.MapPost('/api/vehicles/{id}/rtl',
procedure(Ctx: IHttpContext)
var
VehicleId: string;
begin
VehicleId := Ctx.Request.GetRouteParam('id');
Simulator.ForceRTL(VehicleId);
Ctx.Response.SetStatusCode(200).SendJson('{"status":"RTL_ACK"}');
end);

A interface web foi desenhada com estética cyber tática premium (glassmorphism e paletas escuras HSL neon) e apresenta as seguintes mecânicas avançadas:

  • O que olhar na tela: Atrás de cada indicador redondo de drone no mapa, você verá uma linha luminosa que o segue como uma “cauda”.
  • Como funciona: Um <canvas> sobreposto mantém um histórico circular das últimas 15 coordenadas de cada drone. Conforme o drone se move, o canvas redesenha o rastro aplicando um gradiente de atenuação (fade-out) e espessura menor nas posições mais antigas, criando um efeito de rastro suave. A cor do rastro corresponde ao estado do drone (Ciano para Ativo, Amarelo para Warning, Vermelho para Parado/Stopped).

2. Indicadores de Incidente Pulsantes (Warning Rings)

Seção intitulada “2. Indicadores de Incidente Pulsantes (Warning Rings)”
  • O que olhar na tela: Drones que entram em estado crítico no mapa começam a emitir anéis pulsantes expansivos a partir do seu ponto central.
  • Como funciona: Animações CSS com @keyframes e pseudo-elementos (::after) monitoram o estado de status da telemetria recebida em tempo real. Se o drone muda para o status Warning, um anel amarelo pulsa a cada 1.2s. Caso entre em status crítico (Stopped), um anel vermelho espesso pulsa rapidamente a cada 0.8s, forçando a atenção do operador para o foco do problema.
  • O que olhar na tela: Ao clicar em um drone para abrir a janela flutuante Unit Telemetry, a seção inferior exibe o gráfico de perfil de bateria chamado BATTERY TILE PROFILE.
  • Como funciona: O Javascript monitora um vetor com os últimos 20 níveis de bateria reportados para aquele drone específico. Um mini-canvas renderiza em tempo real um gráfico de linha com área preenchida. Se a bateria cai abaixo de 60%, o gráfico brilha em amarelo; se cai abaixo de 30%, o gráfico e o preenchimento brilham em vermelho, indicando degradação imediata de energia.
  • O que olhar na tela: Botões neon RTL e LAND no painel de telemetria HUD de cada drone.
  • Como funciona:
    • RTL (Return to Base): Ao clicar, o painel envia um comando via POST para o servidor. O backend altera o vetor de navegação da simulação. O drone rotaciona sua proa diretamente para as coordenadas centrais da torre de controle e viaja de volta. Ao se aproximar, o simulador inicia a sequência de pouso automático.
    • LAND: Ao clicar, a velocidade do drone é zerada na hora. A bateria começa a cair de 5% em 5% a cada tick simulando o pouso forçado até atingir 0% e o drone mudar para o status vermelho Stopped.

Durante a implementação, lidamos com uma característica crucial do wrapper HTTP.sys no Delphi. Os ponteiros fornecidos pela API nativa do Windows para a URL cozinhada (CookedUrl.pAbsPath e pQueryString) residem sequencialmente no mesmo segmento de memória buffer e não são terminados em nulo. Para extrair rotas e parâmetros de query sem vazamento de dados ou erros de rota 404, implementamos a extração explícita de tamanho usando SetString:

// A maneira correta de extrair caminhos do HTTP.sys
SetString(Result, CookedUrl.pAbsPath, CookedUrl.AbsPathLength div SizeOf(WideChar));

Otimização e Fluência de Renderização no Frontend

Seção intitulada “Otimização e Fluência de Renderização no Frontend”

Para manter o consumo de CPU baixo no navegador mesmo gerenciando 40 drones atualizando-se 5 vezes por segundo (200 mensagens/segundo no total), a interface web utiliza o padrão de Throttling com RequestAnimationFrame: As mensagens recebidas pelo barramento SSE atualizam apenas o dicionário de dados interno. A renderização visual e reposicionamento de elementos DOM é agendada para o próximo frame disponível do navegador, garantindo animações livres de travamento e um consumo de CPU otimizado.


O projeto Dext AirFlow prova que o Delphi é capaz de sustentar arquiteturas modernas táticas em tempo real de altíssima performance. Ao usar o motor de kernel HTTP.sys, eliminamos camadas desnecessárias de middleware, fornecendo aos operadores uma experiência estável, ágil e visualmente excepcional.

Sinta-se à vontade para explorar os fontes e expandir o exemplo com novos parâmetros de voo e alertas táticos!


Para aprofundar-se nos detalhes de implementação e conferir outros exemplos práticos de telemetria no framework, consulte a documentação oficial: