TsgcWebSocketServer › Properties › 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, MaxQueueSize=0, OverflowPolicy=qopDropOldest
Wanneer ingeschakeld, worden berichten in een interne wachtrij geplaatst en verzonden vanuit de verbindingsthread in plaats van de thread van de aanroeper. Hierdoor is geen vergrendeling nodig 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 als eerste verwerkt, daarna qmLevel1 en tot slot qmLevel2. Door Text.Level en Binary.Level op qmLevel2 en Ping.Level op qmLevel1 in te stellen, is gegarandeerd dat pings vóór gewoon verkeer worden afgeleverd. QueueOptions wordt alleen ondersteund door de standaard-IOHandler. Wanneer IOHandlerOptions.IOHandlerType gelijk is aan iohIOCP of iohEPOLL, wordt de wachtrij 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.
MaxQueueSize begrenst het aantal berichten dat elke wachtrij per verbinding mag bevatten: nul (standaard) betekent onbegrensd, waardoor het eerdere gedrag behouden blijft. Wanneer de limiet is bereikt, beslist OverflowPolicy wat er met nieuwe berichten gebeurt: qopDropOldest (standaard) verwerpt het oudste bericht in de wachtrij om ruimte te maken, qopDropNewest verwerpt het nieuwe bericht en qopDisconnect verwerpt het en sluit de verbinding. Telkens wanneer de limiet wordt bereikt, wordt eerst de gebeurtenis OnSendBufferFull geactiveerd, zodat de toepassing trage consumenten kan detecteren of het verwerpen kan overschrijven.
oServer := TsgcWebSocketServer.Create(nil);
oServer.QueueOptions.Text.Level := qmLevel2;
oServer.QueueOptions.Binary.Level := qmLevel2;
oServer.QueueOptions.Ping.Level := qmLevel1;
oServer.Active := true;