TsgcWebSocketClient › Properties › QueueOptions
Pone en cola los mensajes salientes de tipo texto, binario y Ping para serializarlos en el hilo de la conexión.
property QueueOptions: TsgcWSQueueClient_Options read FQueueOptions write SetQueueOptions;
Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone, MaxQueueSize=0, OverflowPolicy=qopDropOldest, DrainedMode=qdmTransition
De forma predeterminada, los mensajes se escriben directamente en el hilo llamante. Asignar un nivel de cola (qmLevel0, qmLevel1 o qmLevel2) los pone en cola y los envía secuencialmente desde el hilo de conexión, evitando bloqueos cuando varios hilos llaman a WriteData o Ping simultáneamente. Los mensajes en qmLevel0 se procesan antes que los de qmLevel1, y los de qmLevel1 antes que los de qmLevel2, de modo que las categorías de mayor prioridad (por ejemplo, ping) pueden entregarse antes que los payloads.
MaxQueueSize limita el número de mensajes que puede contener una cola: cero (valor predeterminado) significa sin límite, conservando el comportamiento anterior. Cuando se alcanza el límite, OverflowPolicy decide qué ocurre con los mensajes nuevos: qopDropOldest (valor predeterminado) descarta el mensaje encolado más antiguo para hacer sitio, qopDropNewest descarta el mensaje nuevo y qopDisconnect lo descarta y cierra la conexión. Cada vez que se alcanza el límite, primero se dispara el evento OnSendBufferFull, lo que permite a la aplicación supervisar la contrapresión o anular el descarte.
DrainedMode selecciona cuándo se produce el evento OnQueueDrained. Con qdmTransition (valor predeterminado) el evento se dispara una vez cada vez que la cola saliente de una conexión pasa de contener mensajes a estar vacía. Con qdmEveryPass se dispara en cada pasada del bucle de conexión, justo después de enviar las colas, incluso cuando la cola ya estaba vacía e incluso cuando Text.Level, Binary.Level y Ping.Level son todos qmNone, de modo que no hace falta un nivel de cola ficticio. Resulta útil como gancho por conexión que se ejecuta en el propio hilo de la conexión, por ejemplo para enviar datos pendientes de la aplicación con WriteData. El evento no sigue a NotifyEvents, por lo que el manejador debe ser rápido y no debe tocar la interfaz de usuario. Cada conexión copia las opciones de la cola al conectarse, así que configure DrainedMode antes de activar el componente; las conexiones ya abiertas conservan el modo anterior.
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;