TsgcWebSocketServer › Eigenschaften › QueueOptions

QueueOptions Eigenschaft

Serialisiert ausgehende Nachrichten über eine interne Warteschlange pro Verbindung, um Konkurrenz zwischen Threads zu vermeiden.

Syntax

property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;

Standardwert

Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone, MaxQueueSize=0, OverflowPolicy=qopDropOldest

Hinweise

Wenn aktiviert, werden Nachrichten in eine interne Queue gestellt und im Kontext des Verbindungs-Threads statt des Threads des Aufrufers gesendet. Das beseitigt das Locking, das benötigt wird, wenn mehrere Threads gleichzeitig in dieselbe Verbindung schreiben. Jeder Nachrichtentyp (Text, Binary, Ping) ist ein Unterobjekt mit einer eigenen Level-Eigenschaft, die eine unabhängige Priorität zuweist: qmNone überspringt die Queue (Standard), qmLevel0 wird zuerst verarbeitet, dann qmLevel1 und schließlich qmLevel2. Wenn Sie zum Beispiel Text.Level und Binary.Level auf qmLevel2 und Ping.Level auf qmLevel1 setzen, wird garantiert, dass Pings vor dem normalen Datenverkehr zugestellt werden. QueueOptions wird nur vom Standard-IOHandler unterstützt. Wenn IOHandlerOptions.IOHandlerType auf iohIOCP oder iohEPOLL steht, wird die Queue beim Start des Servers abgeschaltet: Die drei Stufen werden auf qmNone zurückgesetzt, das Ereignis OnError meldet dies, und Nachrichten werden inline im aufrufenden Thread geschrieben. Eine Stufe, die zugewiesen wird, nachdem der Server bereits lauscht, wird bei jeder neuen Verbindung auf dieselbe Weise zurückgesetzt.

MaxQueueSize begrenzt die Anzahl der Nachrichten, die jede Warteschlange pro Verbindung aufnehmen darf: Null (Standard) bedeutet unbegrenzt und behält das bisherige Verhalten bei. Wenn das Limit erreicht ist, entscheidet OverflowPolicy, was mit neuen Nachrichten geschieht: qopDropOldest (Standard) verwirft die älteste eingereihte Nachricht, um Platz zu schaffen, qopDropNewest verwirft die neue Nachricht und qopDisconnect verwirft sie und schließt die Verbindung. Jedes Mal, wenn das Limit erreicht wird, wird zuerst das Ereignis OnSendBufferFull ausgelöst, wodurch die Anwendung langsame Verbraucher erkennen oder das Verwerfen außer Kraft setzen kann.

Beispiel


oServer := TsgcWebSocketServer.Create(nil);
oServer.QueueOptions.Text.Level := qmLevel2;
oServer.QueueOptions.Binary.Level := qmLevel2;
oServer.QueueOptions.Ping.Level := qmLevel1;
oServer.Active := true;

Zurück zu Properties