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

Deze optie wordt niet ondersteund en het instellen ervan heeft geen effect. De eigenschap wordt alleen behouden voor compatibiliteit, zodat bestaande formulieren en code die deze gebruiken, nog steeds laden.

 

Type: Boolean.

Standaard: False.

Waarom dit niet wordt ondersteund: de overlapped I/O van de server is afhankelijk van een completion packet voor elke aanroep, zelfs wanneer de aanroep meteen slaagt.

 

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, en HighPerf-dispatch met een verbreed vooraf geplaatst ontvangstvenster.

 


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;
  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;