TsgcWebSocketClient › 属性 › QueueOptions

QueueOptions 属性

将出站 Text、Binary 和 Ping 消息排队,以便在连接线程上串行发送。

语法

property QueueOptions: TsgcWSQueueClient_Options read FQueueOptions write SetQueueOptions;

默认值

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

备注

默认情况下,消息直接在调用线程上写入。指定队列级别(qmLevel0、qmLevel1 或 qmLevel2)后,消息将入队并从连接线程依次发送,避免多个线程同时调用 WriteData 或 Ping 时产生锁竞争。qmLevel0 的消息在 qmLevel1 之前处理,qmLevel1 在 qmLevel2 之前处理,因此优先级较高的类别(例如 ping)可先于有效载荷传递。

MaxQueueSize 限制队列可容纳的消息数量:零(默认值)表示不设上限,保持以前的行为。达到上限时,OverflowPolicy 决定新消息的处理方式:qopDropOldest(默认值)丢弃队列中最旧的消息以腾出空间,qopDropNewest 丢弃新消息,qopDisconnect 丢弃新消息并关闭连接。每次达到上限时,都会先触发 OnSendBufferFull 事件,使应用程序能够监控背压或覆盖丢弃行为。

DrainedMode 用于选择何时触发 OnQueueDrained 事件。使用 qdmTransition(默认值)时,每当连接的出站队列由有消息变为空时,该事件触发一次。使用 qdmEveryPass 时,它会在连接循环的每一次传递中、队列发送完毕之后立即触发,即使队列本来就是空的,也即使 Text.Level、Binary.Level 和 Ping.Level 全部为 qmNone,因此无需设置虚设的队列级别。它可用作在连接自身线程上运行的每连接钩子,例如使用 WriteData 发送待处理的应用程序数据。该事件不遵循 NotifyEvents,因此处理程序必须足够快,并且不得操作用户界面。每个连接在建立时会复制队列选项,因此请在激活组件之前设置 DrainedMode,已经打开的连接保持之前的模式。

示例


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;

返回属性