TsgcWebSocketServer_HTTPAPI › Propriedades › QueueOptions

QueueOptions Propriedade

Serializa as mensagens de saída através de uma fila interna por conexão para evitar contenção entre threads.

Sintaxe

property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;

Valor Padrão

Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone, DrainedMode=qdmTransition

Observações

Quando habilitado, as mensagens são colocadas em uma fila interna e enviadas no contexto da thread de conexão em vez da thread do chamador — isso elimina o bloqueio necessário quando várias threads escrevem na mesma conexão simultaneamente. Cada tipo de mensagem (Text, Binary, Ping) é um subobjeto com sua própria propriedade Level, que atribui uma prioridade independente: qmNone ignora a fila (padrão), qmLevel0 é processado primeiro, depois qmLevel1 e finalmente qmLevel2. Por exemplo, definir Text.Level e Binary.Level como qmLevel2 e Ping.Level como qmLevel1 garante que os pings sejam entregues antes do tráfego comum.

QueueOptions não é suportado pelo servidor HTTP.sys. A fila é desativada assim que o servidor inicia: os três níveis são redefinidos para qmNone, o evento OnError informa isso e as mensagens são gravadas em linha na thread do chamador. Um nível atribuído depois que o servidor já está escutando é redefinido da mesma forma em cada nova conexão. O motor http.sys é orientado por conclusões de IOCP e não possui um laço por conexão a partir do qual esvaziar uma fila, portanto uma mensagem enfileirada nunca chegaria ao socket.

DrainedMode (qdmTransition por padrão, ou qdmEveryPass) seleciona quando o evento OnQueueDrained é disparado. Ele não tem efeito neste componente, porque o servidor HTTP.sys não possui um laço por conexão e o evento nunca é disparado por passagem.

Exemplo


oServer := TsgcWebSocketServer_HTTPAPI.Create(nil);
// QueueOptions is not supported here, the three levels are reset to qmNone on start
oServer.Active := true;

Voltar para Propriedades