TsgcWebSocketServer › Eigenschaften › QueueOptions
Serialisiert ausgehende Nachrichten über eine interne Warteschlange pro Verbindung, um Konkurrenz zwischen Threads zu vermeiden.
property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;
Text=qmNone, Binary=qmNone, Ping=qmNone, MaxQueueSize=0, OverflowPolicy=qopDropOldest
Wenn aktiviert, werden Nachrichten in eine interne Queue gestellt und im Kontext des Verbindungs-Threads statt des Threads des Aufrufers gesendet — dies beseitigt das Locking, das benötigt wird, wenn mehrere Threads gleichzeitig in dieselbe Verbindung schreiben. Jedem Nachrichtentyp (Text, Binary, Ping) kann eine unabhängige Prioritätsstufe zugewiesen werden: qmNone überspringt die Queue (Standard), qmLevel1 wird zuerst verarbeitet, dann qmLevel2 und schließlich qmLevel3. Wenn Sie zum Beispiel Text und Binary auf qmLevel2 und Ping auf qmLevel1 setzen, wird garantiert, dass Pings vor dem normalen Datenverkehr zugestellt werden. QueueOptions wird nicht unterstützt, wenn IOHandlerOptions auf iohIOCP gesetzt ist.
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.
oServer := TsgcWebSocketServer.Create(nil);
oServer.QueueOptions.Text := qmLevel2;
oServer.QueueOptions.Binary := qmLevel2;
oServer.QueueOptions.Ping := qmLevel1;
oServer.Active := true;