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:
ompClassic— uma única thread de aceite chamaHttpReceiveHttpRequestde forma síncrona e despacha manualmente cada requisição para o pool de workers IOCP viaPostQueuedCompletionStatus. Este é o comportamento histórico.ompHighPerf— implementa o padrão de referência "HTTP Server High Performance" da Microsoft. A thread de aceite é completamente removida. Na inicialização, o servidor pré-postaThreadPoolSize × HighPerfAcceptsPerWorkerrecebimentos assíncronos na fila IOCP (padrão: 32 × 4 = 128 recebimentos concorrentes pendentes). Cada worker trata sua conclusão inline e reposta outro recebimento assíncrono, mantendo uma janela deslizante até o encerramento.
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;
