TsgcWebSocketClient › Eigenschaften › QueueOptions
Stellt ausgehende Text-, Binär- und Ping-Nachrichten in die Warteschlange, sodass sie auf dem Verbindungs-Thread serialisiert werden.
property QueueOptions: TsgcWSQueueClient_Options read FQueueOptions write SetQueueOptions;
Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone, MaxQueueSize=0, OverflowPolicy=qopDropOldest, DrainedMode=qdmTransition
Standardmäßig werden Nachrichten direkt im aufrufenden Thread geschrieben. Die Zuweisung einer Queue-Ebene (qmLevel0, qmLevel1 oder qmLevel2) reiht sie ein und sendet sie sequenziell aus dem Verbindungs-Thread, wodurch Sperren vermieden werden, wenn mehrere Threads gleichzeitig WriteData oder Ping aufrufen. Nachrichten auf qmLevel0 werden vor qmLevel1 verarbeitet und qmLevel1 vor qmLevel2, sodass Kategorien mit höherer Priorität (zum Beispiel Ping) vor Payloads geliefert werden können.
MaxQueueSize begrenzt die Anzahl der Nachrichten, die eine Warteschlange 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 Gegendruck (Backpressure) überwachen oder das Verwerfen außer Kraft setzen kann.
DrainedMode legt fest, wann das Ereignis OnQueueDrained ausgelöst wird. Mit qdmTransition (Standard) wird das Ereignis jedes Mal einmal ausgelöst, wenn die ausgehende Queue einer Verbindung von gefüllt zu leer wechselt. Mit qdmEveryPass wird es bei jedem Durchlauf der Verbindungsschleife ausgelöst, direkt nachdem die Queues gesendet wurden, auch wenn die Queue bereits leer war und auch wenn Text.Level, Binary.Level und Ping.Level alle qmNone sind, sodass keine Dummy-Queue-Stufe nötig ist. Es eignet sich als Hook pro Verbindung, der im eigenen Thread der Verbindung läuft, zum Beispiel um ausstehende Anwendungsdaten mit WriteData zu senden. Das Ereignis folgt nicht NotifyEvents, daher muss der Handler schnell sein und darf die Benutzeroberfläche nicht anfassen. Jede Verbindung kopiert die Queue-Optionen beim Verbinden, setzen Sie DrainedMode daher vor dem Aktivieren der Komponente, bereits geöffnete Verbindungen behalten den vorherigen Modus.
oClient := TsgcWebSocketClient.Create(nil);
oClient.URL := 'wss://www.esegece.com:2053';
oClient.QueueOptions.Ping.Level := qmLevel1;
oClient.QueueOptions.Text.Level := qmLevel2;
oClient.QueueOptions.Binary.Level := qmLevel2;
oClient.Active := true;