TsgcWebSocketServerProprietà › QueueOptions

QueueOptions Property

Serializza i messaggi in uscita tramite una coda interna per connessione per prevenire la contesa tra thread.

Sintassi

property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;

Valore predefinito

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

Note

Quando abilitato, i messaggi vengono collocati in una coda interna e inviati nel contesto del thread della connessione anziché nel thread del chiamante. Questo elimina il blocco necessario quando più thread scrivono sulla stessa connessione contemporaneamente. Ogni tipo di messaggio (Text, Binary, Ping) è un sotto-oggetto con una propria proprietà Level, che assegna una priorità indipendente: qmNone salta la coda (predefinito), qmLevel0 viene elaborato per primo, poi qmLevel1 e infine qmLevel2. Ad esempio, impostare Text.Level e Binary.Level su qmLevel2 e Ping.Level su qmLevel1 garantisce che i ping vengano consegnati prima del traffico ordinario. QueueOptions è supportato solo dall'IOHandler predefinito. Quando IOHandlerOptions.IOHandlerType è iohIOCP o iohEPOLL, la coda viene disattivata all'avvio del server: i tre livelli vengono reimpostati su qmNone, l'evento OnError lo segnala e i messaggi vengono scritti inline sul thread del chiamante. Un livello assegnato quando il server è già in ascolto viene reimpostato allo stesso modo a ogni nuova connessione.

MaxQueueSize limita il numero di messaggi che ogni coda per connessione 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 rilevare i consumatori lenti o di annullare lo scarto.

Esempio


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

Torna alle Proprietà