TsgcWebSocketServer_HTTPAPI › Proprietà › QueueOptions
Serializza i messaggi in uscita tramite una coda interna per connessione per prevenire la contesa tra thread.
property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;
Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone
Quando abilitato, i messaggi vengono inseriti in una coda interna e inviati nel contesto del thread di connessione anziché nel thread del chiamante. Questo elimina il locking necessario quando più thread scrivono sulla stessa connessione contemporaneamente. Ciascun tipo di messaggio (Text, Binary, Ping) è un sotto-oggetto con una propria proprietà Level, che assegna una priorità indipendente: qmNone bypassa la coda (valore predefinito), qmLevel0 viene elaborato per primo, poi qmLevel1 e infine qmLevel2. Ad esempio, impostando Text.Level e Binary.Level a qmLevel2 e Ping.Level a qmLevel1 si garantisce che i ping vengano consegnati prima del traffico ordinario.
QueueOptions non è supportato dal server HTTP.sys. 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. Il motore http.sys è guidato dai completamenti IOCP e non ha un ciclo per connessione da cui svuotare una coda, quindi un messaggio in coda non raggiungerebbe mai il socket.
oServer := TsgcWebSocketServer_HTTPAPI.Create(nil);
// QueueOptions is not supported here, the three levels are reset to qmNone on start
oServer.Active := true;