HTTP.SYS Ajuste de Alto Desempenho

· Recursos

A partir do sgcWebSockets 2026.5.0, o componente TsgcWSServer_HTTPAPI expõe uma nova propriedade publicada, FineTune, tipada como TsgcServerHTTPAPI_FineTune. Ela agrupa todos os ajustes de baixo nível em modo kernel que influenciam como a Windows HTTP Server API (http.sys) enfileira, despacha e conclui requisições. Até agora esses ajustes não existiam no componente ou eram fixos — agora são publicados, persistidos com o formulário e configuráveis em tempo de design.

A propriedade FineTune é um container TPersistent com quatro sub-propriedades: QueueLength, SkipIOCPOnSuccess, OperatingMode e HighPerfAcceptsPerWorker. Cada uma tem um valor padrão que preserva o comportamento existente, portanto atualizar para a versão 2026.5.0 não exige nenhuma alteração de código; você ativa cada ajuste individualmente quando uma carga de trabalho específica assim o exigir.

As propriedades do FineTune

QueueLength : ULONG (padrão 1000)

O que faz. Encapsula a configuração de kernel HttpServerQueueLengthProperty. Controla quantas requisições pendentes o http.sys manterá na sua fila em modo kernel antes de o servidor as desenfileirar. Quando a fila está cheia, o kernel responde às novas conexões com 503 Service Unavailable diretamente, sem jamais chegar ao modo usuário.

O que melhora. Em cargas de trabalho com picos — milhares de dispositivos IoT reconectando após uma falha de rede, implantações em frota, picos de tráfego na abertura de mercado — aumentar o QueueLength impede que o kernel rejeite clientes antes de o processo recebê-los, evitando retentativas em cascata. O padrão 1000 corresponde ao padrão do kernel Windows e é conservador para cargas modernas; o intervalo válido vai até 65535.

SkipIOCPOnSuccess : Boolean (padrão False)

O que faz. Quando definido como True, habilita os flags FILE_SKIP_COMPLETION_PORT_ON_SUCCESS e FILE_SKIP_SET_EVENT_ON_HANDLE no handle da fila de requisições via SetFileCompletionNotificationModes. O kernel então pula o envio de um pacote de conclusão ao IOCP quando uma operação de I/O sobreposta é concluída de forma síncrona.

O que melhora. Elimina uma transição de kernel para modo usuário no caminho crítico de requisições quando a chamada retorna NO_ERROR de forma síncrona — o worker despacha a conclusão inline na thread chamadora em vez de aguardar um pacote IOCP. Esse é o padrão usado na amostra de referência "HTTP Server High Performance" da Microsoft. O padrão False é intencional: habilitar o flag exige tratamento de conclusões inline no lado do chamador. A propriedade deve ser usada em conjunto com OperatingMode = ompHighPerf em cargas de trabalho em que o ganho de throughput justifica o caminho de código adicional.

OperatingMode : TsgcHTTPAPIOperatingMode (padrão ompClassic)

O que faz. Seleciona uma das duas arquiteturas de aceite/despacho:

O que melhora. O ompHighPerf compensa quando o servidor lida com pipelines de fluxo único profundos (uploads/downloads de frames grandes) ou com muitos clientes simultâneos (centenas a milhares). A janela de recebimento pré-postada absorve picos sem alocação por conexão, e o despacho inline remove o gargalo de transferência do acceptor. Mantenha o padrão ompClassic para APIs de baixo tráfego e ambientes de desenvolvimento — em cargas leves, o overhead de manter 128 contextos pré-postados custa mais do que economiza. O modo só pode ser alterado no momento da construção; misturar modos durante o tempo de vida de um único processo não é suportado.

HighPerfAcceptsPerWorker : Integer (padrão 4)

O que faz. Controla quantos recebimentos assíncronos cada worker IOCP pré-posta quando OperatingMode = ompHighPerf. O valor é ignorado no modo ompClassic. O total de recebimentos pendentes simultâneos mantidos pelo servidor é igual a ThreadPoolSize × HighPerfAcceptsPerWorker.

O que melhora. Uma janela por worker mais ampla permite que o servidor absorva picos maiores de requisições entrantes sem alocar novos contextos no caminho crítico. Aumente-o para implantações de alta concorrência (frotas IoT, distribuição de dados de mercado, brokers fan-out); a contrapartida é memória — cada recebimento pré-postado mantém um buffer de requisição (~16 KB) reservado até ser concluído. O padrão 4 é um meio-termo conservador validado contra a amostra "HP" do MSDN.

Exemplo de uso

O trecho a seguir configura um servidor HTTP.sys para um backend IoT de alta concorrência: uma fila de kernel grande para absorver tempestades de reconexão, despacho HighPerf com janela de recebimento pré-postada ampliada e despacho de conclusão inline habilitado.

uses
  sgcWebSocket_Server_HTTPAPI,
  sgcWebSocket_HTTPAPI_Server;   // TsgcHTTPAPIOperatingMode
var
  oServer: TsgcWSServer_HTTPAPI;
begin
  oServer := TsgcWSServer_HTTPAPI.Create(nil);
  oServer.Host := '0.0.0.0';
  oServer.Port := 8080;
  // absorb 10,000-device reconnect bursts before kernel-level 503
  oServer.FineTune.QueueLength := 10000;
  // switch from single-acceptor to pre-posted IOCP workers
  oServer.FineTune.OperatingMode := ompHighPerf;
  // widen the per-worker pre-posted receive window (32 threads * 8 = 256)
  oServer.FineTune.HighPerfAcceptsPerWorker := 8;
  // dispatch inline on sync-success completions; skip the IOCP round-trip
  oServer.FineTune.SkipIOCPOnSuccess := True;
  oServer.Active := True;
end;

Para uma API interna ou de baixo tráfego típica, mantenha todas as propriedades FineTune em seus valores padrão:

oServer := TsgcWSServer_HTTPAPI.Create(nil);
oServer.Host := 'localhost';
oServer.Port := 8080;
// FineTune defaults: QueueLength=1000, SkipIOCPOnSuccess=False,
// OperatingMode=ompClassic, HighPerfAcceptsPerWorker=4
oServer.Active := True;