TsgcWebSocketClient › Propriétés › QueueOptions

QueueOptions Propriété

Met en file d'attente les messages sortants Texte, Binaire et Ping afin qu'ils soient sérialisés sur le thread de connexion.

Syntaxe

property QueueOptions: TsgcWSQueueClient_Options read FQueueOptions write SetQueueOptions;

Valeur par défaut

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

Remarques

Par défaut, les messages sont écrits directement sur le thread appelant. L'attribution d'un niveau de file d'attente (qmLevel0, qmLevel1 ou qmLevel2) les met en file et les envoie séquentiellement depuis le thread de connexion, évitant les verrous lorsque plusieurs threads appellent WriteData ou Ping simultanément. Les messages à qmLevel0 sont traités avant qmLevel1, et qmLevel1 avant qmLevel2, de sorte que les catégories à plus haute priorité (par exemple ping) peuvent être livrées avant les charges utiles.

MaxQueueSize limite le nombre de messages qu'une file d'attente peut contenir : zéro (par défaut) signifie illimité, ce qui conserve le comportement antérieur. Lorsque la limite est atteinte, OverflowPolicy décide du sort des nouveaux messages : qopDropOldest (par défaut) supprime le message en file le plus ancien pour faire de la place, qopDropNewest supprime le nouveau message et qopDisconnect le supprime et ferme la connexion. Chaque fois que la limite est atteinte, l'événement OnSendBufferFull se déclenche d'abord, permettant à l'application de surveiller la contre-pression (backpressure) ou d'outrepasser la suppression.

DrainedMode sélectionne le moment où l'événement OnQueueDrained est déclenché. Avec qdmTransition (par défaut), l'événement se déclenche une fois chaque fois que la file d'attente sortante d'une connexion passe de l'état contenant des messages à l'état vide. Avec qdmEveryPass, il se déclenche à chaque passage de la boucle de connexion, juste après l'envoi des files d'attente, même si la file était déjà vide et même si Text.Level, Binary.Level et Ping.Level valent tous qmNone, de sorte qu'aucun niveau de file factice n'est nécessaire. C'est utile comme crochet par connexion exécuté sur le thread propre de la connexion, par exemple pour envoyer des données applicatives en attente avec WriteData. L'événement ne suit pas NotifyEvents, le gestionnaire doit donc être rapide et ne pas toucher à l'interface utilisateur. Chaque connexion copie les options de file d'attente lors de sa connexion, définissez donc DrainedMode avant d'activer le composant, les connexions déjà ouvertes conservent le mode précédent.

Exemple


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;

Retour aux propriétés