TsgcWebSocketServer › Propriétés › QueueOptions
Sérialise les messages sortants via une file d'attente interne par connexion pour éviter les conflits entre les threads.
property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;
Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone, MaxQueueSize=0, OverflowPolicy=qopDropOldest
Lorsqu'il est activé, les messages sont placés dans une file d'attente interne et envoyés dans le contexte du thread de connexion au lieu du thread de l'appelant. Cela supprime le verrouillage nécessaire lorsque plusieurs threads écrivent simultanément sur la même connexion. Chaque type de message (Text, Binary, Ping) est un sous-objet doté de sa propre propriété Level, qui lui attribue une priorité indépendante : qmNone ignore la file d'attente (par défaut), qmLevel0 est traité en premier, puis qmLevel1 et enfin qmLevel2. Par exemple, définir Text.Level et Binary.Level à qmLevel2 et Ping.Level à qmLevel1 garantit que les pings sont livrés avant le trafic ordinaire. QueueOptions n'est pris en charge que par l'IOHandler par défaut. Lorsque IOHandlerOptions.IOHandlerType vaut iohIOCP ou iohEPOLL, la file d'attente est désactivée au démarrage du serveur : les trois niveaux sont réinitialisés à qmNone, l'événement OnError le signale et les messages sont écrits en ligne sur le thread appelant. Un niveau attribué alors que le serveur est déjà en écoute est réinitialisé de la même manière à chaque nouvelle connexion.
MaxQueueSize limite le nombre de messages que chaque file d'attente par connexion 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 détecter les consommateurs lents ou d'outrepasser la suppression.
oServer := TsgcWebSocketServer.Create(nil);
oServer.QueueOptions.Text.Level := qmLevel2;
oServer.QueueOptions.Binary.Level := qmLevel2;
oServer.QueueOptions.Ping.Level := qmLevel1;
oServer.Active := true;