TsgcWebSocketClient › Propriedades › QueueOptions

QueueOptions Propriedade

Enfileira mensagens Text, Binary e Ping de saída para que sejam serializadas na thread da conexão.

Sintaxe

property QueueOptions: TsgcWSQueueClient_Options read FQueueOptions write SetQueueOptions;

Valor Padrão

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

Observações

Por padrão, as mensagens são gravadas diretamente na thread chamadora. Atribuir um nível de queue (qmLevel0, qmLevel1 ou qmLevel2) as enfileira e as envia sequencialmente a partir da thread de conexão, evitando locks quando várias threads chamam WriteData ou Ping ao mesmo tempo. As mensagens em qmLevel0 são processadas antes de qmLevel1, e qmLevel1 antes de qmLevel2, de modo que categorias de maior prioridade (por exemplo, ping) possam ser entregues antes dos payloads.

MaxQueueSize limita o número de mensagens que uma fila pode conter: zero (padrão) significa sem limite, mantendo o comportamento anterior. Quando o limite é atingido, OverflowPolicy decide o que acontece com as novas mensagens: qopDropOldest (padrão) descarta a mensagem enfileirada mais antiga para abrir espaço, qopDropNewest descarta a nova mensagem e qopDisconnect a descarta e fecha a conexão. Cada vez que o limite é atingido, o evento OnSendBufferFull é disparado primeiro, permitindo que a aplicação monitore backpressure ou anule o descarte.

DrainedMode seleciona quando o evento OnQueueDrained é disparado. Com qdmTransition (padrão), o evento é disparado uma vez cada vez que a fila de saída de uma conexão passa de conter mensagens para ficar vazia. Com qdmEveryPass, ele é disparado a cada passagem do laço da conexão, logo após o envio das filas, mesmo quando a fila já estava vazia e mesmo quando Text.Level, Binary.Level e Ping.Level são todos qmNone, de modo que não é necessário um nível de fila fictício. É útil como um gancho por conexão executado na própria thread da conexão, por exemplo para enviar dados pendentes da aplicação com WriteData. O evento não segue NotifyEvents, portanto o manipulador deve ser rápido e não deve tocar na interface do usuário. Cada conexão copia as opções da fila quando se conecta, portanto defina DrainedMode antes de ativar o componente; as conexões já abertas mantêm o modo anterior.

Exemplo


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;

Voltar para Propriedades