TsgcWebSocketServer_HTTPAPI › Eigenschappen › QueueOptions
Serialiseert uitgaande berichten via een interne wachtrij per verbinding om contentie tussen threads te voorkomen.
property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;
Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone
Wanneer ingeschakeld, worden berichten geplaatst in een interne wachtrij en verzonden in de context van de verbindingsthread in plaats van de thread van de aanroeper. Dit verwijdert de vergrendeling die nodig is wanneer meerdere threads tegelijkertijd naar dezelfde verbinding schrijven. Elk berichttype (Text, Binary, Ping) is een subobject met een eigen eigenschap Level, die een onafhankelijke prioriteit toekent: qmNone slaat de wachtrij over (standaard), qmLevel0 wordt eerst verwerkt, dan qmLevel1 en ten slotte qmLevel2. Als u bijvoorbeeld Text.Level en Binary.Level instelt op qmLevel2 en Ping.Level op qmLevel1, wordt gegarandeerd dat pings vóór normaal verkeer worden bezorgd.
QueueOptions wordt niet ondersteund door de HTTP.sys-server. De wachtrij wordt uitgeschakeld zodra de server start: de drie niveaus worden teruggezet op qmNone, de gebeurtenis OnError meldt dit en berichten worden inline op de aanroepende thread geschreven. Een niveau dat wordt toegewezen nadat de server al luistert, wordt op dezelfde manier teruggezet bij elke nieuwe verbinding. De http.sys-engine wordt aangestuurd door IOCP-voltooiingen en heeft geen lus per verbinding om een wachtrij te legen, waardoor een bericht in de wachtrij de socket nooit zou bereiken.
oServer := TsgcWebSocketServer_HTTPAPI.Create(nil);
// QueueOptions is not supported here, the three levels are reset to qmNone on start
oServer.Active := true;