TsgcWebSocketClient › Proprietà › QueueOptions

QueueOptions Property

Mette in coda i messaggi in uscita di tipo Text, Binary e Ping in modo che vengano serializzati sul thread della connessione.

Sintassi

property QueueOptions: TsgcWSQueueClient_Options read FQueueOptions write SetQueueOptions;

Valore predefinito

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

Note

Per impostazione predefinita, i messaggi vengono scritti direttamente nel thread chiamante. L'assegnazione di un livello di coda (qmLevel0, qmLevel1 o qmLevel2) li mette in coda e li invia sequenzialmente dal thread di connessione, evitando blocchi quando più thread chiamano WriteData o Ping contemporaneamente. I messaggi a qmLevel0 vengono elaborati prima di qmLevel1, e qmLevel1 prima di qmLevel2, in modo che le categorie con priorità più alta (ad esempio ping) possano essere consegnate prima dei payload.

MaxQueueSize limita il numero di messaggi che una coda può contenere: zero (predefinito) significa illimitato, mantenendo il comportamento precedente. Quando il limite viene raggiunto, OverflowPolicy decide cosa accade con i nuovi messaggi: qopDropOldest (predefinito) scarta il messaggio accodato più vecchio per fare spazio, qopDropNewest scarta il nuovo messaggio e qopDisconnect lo scarta e chiude la connessione. Ogni volta che il limite viene raggiunto, viene prima generato l'evento OnSendBufferFull, consentendo all'applicazione di monitorare la contropressione o di annullare lo scarto.

DrainedMode seleziona quando viene generato l'evento OnQueueDrained. Con qdmTransition (predefinito) l'evento si attiva una sola volta ogni volta che la coda in uscita di una connessione passa dal contenere messaggi all'essere vuota. Con qdmEveryPass si attiva a ogni passaggio del ciclo della connessione, subito dopo l'invio delle code, anche quando la coda era già vuota e anche quando Text.Level, Binary.Level e Ping.Level sono tutti qmNone, quindi non serve alcun livello di coda fittizio. È utile come hook per connessione eseguito sul thread proprio della connessione, ad esempio per inviare dati applicativi in sospeso con WriteData. L'evento non segue NotifyEvents, quindi il gestore deve essere veloce e non deve toccare l'interfaccia utente. Ogni connessione copia le opzioni della coda quando si connette, quindi impostare DrainedMode prima di attivare il componente: le connessioni già aperte mantengono la modalità precedente.

Esempio


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;

Torna alle Proprietà