TsgcWebSocketServer_HTTPAPIProperties › QueueOptions

QueueOptions 属性

通过内部每连接队列序列化出站消息,以防止线程间的竞争。

语法

property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;

默认值

Text.Level=qmNoneBinary.Level=qmNonePing.Level=qmNone

备注

启用后,消息被放入内部队列,并在连接线程的上下文中发送,而非在调用方线程中发送。这消除了多个线程同时向同一连接写入时所需的锁定。每种消息类型(TextBinaryPing)都是一个子对象,各自拥有自己的 Level 属性,用于指定独立的优先级别:qmNone 跳过队列(默认),qmLevel0 最先处理,然后是 qmLevel1,最后是 qmLevel2。例如,将 Text.LevelBinary.Level 设为 qmLevel2,将 Ping.Level 设为 qmLevel1,可保证 ping 先于普通流量传递。

HTTP.sys 服务器不支持 QueueOptions。队列会在服务器启动时被关闭:三个级别都会重置为 qmNoneOnError 事件会报告此情况,消息将在调用方线程上内联写出。在服务器已经开始侦听之后再指定级别,也会在每个新连接上以同样的方式被重置。http.sys 引擎由 IOCP 完成通知驱动,没有可用于清空队列的每连接循环,因此排入队列的消息永远不会到达套接字。

示例


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

返回属性