HTTPAPI | FineTune

TsgcWSServer_HTTPAPI geeft een gepubliceerde eigenschap bloot met de naam FineTune van het type TsgcServerHTTPAPI_FineTune. Het groepeert de low-level kernel-mode knoppen die beïnvloeden hoe de Windows HTTP Server API (http.sys) verzoeken in de wachtrij plaatst, verzendt en voltooit.

 

QueueLength

Omhult de kernelinstelling HttpServerQueueLengthProperty. Het bepaalt het maximale aantal lopende verzoeken dat http.sys in zijn kernelmodus-wachtrij bewaard voordat de server ze heeft verwijderd. Wanneer de wachtrij vol is, reageert de kernel op nieuwe verbindingen met 503 Service Unavailable rechtstreeks, zonder de gebruikersmodus ooit te bereiken.

 

Type: ULONG.

Standaard: 1000 (de standaardwaarde van de Windows-kernel).

Bereik: tot 65535 verzoeken.

Wat dit verbetert: het verhogen van deze waarde voorkomt dat de kernel legitiem verkeer afwijst bij piekige werklasten — IoT-vloten die opnieuw verbinden na een netwerkstoornss, marktdata-broadcast-clients die opnieuw verbinden na een reset van de provider, of geplande taakwerkers die allemaal verbinding maken op een gedeelde cron-tick.

 

SkipIOCPOnSuccess

Wanneer ingesteld op True, roept de server SetFileCompletionNotificationModes aan op de request queue-handle met de vlaggen FILE_SKIP_COMPLETION_PORT_ON_SUCCESS en FILE_SKIP_SET_EVENT_ON_HANDLE. Overlapped I/O-bewerkingen op de request queue die synchroon voltooien, posten niet langer een extra completion packet naar de I/O completion port.

 

Type: Boolean.

Default: False (no flag is set, preserving current behavior).

Wat dit verbetert: elimineert een kernel-naar-gebruikersmodus-hop op het hot-verzoekpad wanneer de aanroep synchroon NO_ERROR retourneert — de worker verwerkt de voltooiing inline op de aanroepende thread in plaats van te wachten op een IOCP-pakket. Dit is het patroon dat door Microsoft's referentie HTTP Server High Performance-voorbeeld wordt gebruikt. De vlag is bedoeld om samen te worden gebruikt met OperatingMode = ompHighPerf.

 

De API wordt tijdens uitvoering opgelost via GetProcAddress vanuit kernel32. Op Windows XP en ouder (Delphi 7 runtime-doel) bestaat het ingangspunt niet — de wrapper retourneert False en de server wordt uitgevoerd zonder de vlag ingesteld.

 

OperatingMode

Selects one of two accept/dispatch architectures.

 

Type: TsgcHTTPAPIOperatingMode = (ompClassic, ompHighPerf).

Standaard: ompClassic.

 

 

Wat het verbetert: ompHighPerf loont wanneer de server ofwel diepe single-stream-pipelines (grote frame-uploads/-downloads) of veel gelijktijdige clients (honderden tot duizenden) ziet. Het vooraf geplaatste ontvangstvenster absorbeert bursts zonder per-verbinding allocatie, en de inline dispatch verwijdert het acceptor-overdrachts-knelpunt. Laat de standaard ompClassic staan voor weinig-verkeer API's en ontwikkelomgevingen — bij lichte werklasten kost de overhead van het onderhouden van 128 vooraf geplaatste contexten meer dan het oplevert. De modus kan alleen worden gewijzigd voordat de server wordt geactiveerd.

 

HighPerfAcceptsPerWorker

Beheert hoeveel asynchrone ontvangsten elke IOCP-worker vooraf plaatst wanneer OperatingMode = ompHighPerf. De waarde wordt genegeerd in de modus ompClassic. Het totale aantal gelijktijdige uitstaande ontvangsten dat de server bijhoudt, is gelijk aan ThreadPoolSize x HighPerfAcceptsPerWorker.

 

Type: Integer.

Standaard: 4.

Wat dit verbetert: een dieper venster per worker stelt de server in staat grotere pieken van inkomende verzoeken te absorberen zonder nieuwe contexten toe te wijzen op het hot-pad. Verhoog dit voor implementaties met hoge gelijktijdigheid (IoT-vloten, marktdatadistributie, fan-out-brokers); de afweging is geheugen — elke vooraf geplaatste ontvangst houdt een verzoekbuffer (~16 KB) gereserveerd totdat deze voltooid is. De standaardwaarde van 4 is een conservatief midden dat gevalideerd is tegen het MSDN HP-voorbeeld.

 

Voorbeeld

Het volgende fragment configureert een HTTP.sys-server voor een IoT-backend met hoge gelijktijdigheid: een grote kernelwachtrij om verbindingsstormen op te vangen, HighPerf-dispatch met een verbreed vooraf geplaatst ontvangstvenster, en inline-voltooiingsdispatch ingeschakeld.

 


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;

 

Voor een typische interne of laagverkeers-API laat u elke FineTune-eigenschap op de standaardwaarde:

 


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