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=qmNone, Binary=qmNone, Ping=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. Aan elk berichttype (Text, Binary, Ping) kan een onafhankelijk prioriteitsniveau worden toegewezen: qmNone slaat de wachtrij over (standaard), qmLevel1 wordt als eerste verwerkt, daarna qmLevel2 en tot slot qmLevel3. Door Text en Binary op qmLevel2 en Ping op qmLevel1 in te stellen, is gegarandeerd dat pings vóór gewoon verkeer worden afgeleverd. QueueOptions wordt niet ondersteund wanneer IOHandlerOptions is ingesteld op iohIOCP.
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 := qmLevel2;
oServer.QueueOptions.Binary := qmLevel2;
oServer.QueueOptions.Ping := qmLevel1;
oServer.Active := true;