TsgcWSPServer_sgc属性 › UseMatchesMask

UseMatchesMask 属性

启用掩码方式匹配频道名称,而不是精确字符串匹配。

语法

property UseMatchesMask: Boolean read FUseMatchesMask write FUseMatchesMask;

默认值

False

备注

UseMatchesMask 是一个仅运行时属性,未在对象查看器(Object Inspector)中发布,因此只能在代码中设置。它是 public,而非 published

默认情况下,频道参数(在 SubscribeBroadcastPublish 等方法中)通过精确字符串比较与连接的订阅进行匹配。当 UseMatchesMaskTrue 时,服务器会改为将频道参数作为 Delphi 掩码System.Masks.MatchesMask*? 通配符,以及诸如 [abc] 之类的字符集)展开,并与当前至少有一个活动订阅者的频道名称集合进行匹配。如果该掩码未匹配到任何活动频道,则该参数将被当作字面频道名称使用。

UseMatchesMask 不是 MQTT 主题过滤器匹配。#+ 没有特殊含义,* 会像其他任何字符一样匹配 /,不存在路径分段的概念。如需符合 MQTT 规范的通配符,请改用 TsgcWSPClient_MQTT / TsgcWSPServer_MQTT

此选项在发布端最为有用,可以将一条消息扇出到当前所有匹配某个模式的频道:

oProtocol.Broadcast('payload', 'topic1/*');

它在订阅端的用处有限:如果客户端在任何具体的 topic1/... 频道尚未拥有订阅者之前发送 Subscribe('topic1/*'),它只会被订阅到字面频道名称 topic1/*,因为此时还没有任何内容可供掩码展开匹配。

示例

// server side, enable mask matching for this protocol instance
sgcWSPServer_sgc1.UseMatchesMask := True;

// clients subscribe to concrete channel names
// sgcWSPClient_sgc1.Subscribe('topic1/a');
// sgcWSPClient_sgc2.Subscribe('topic1/b');

// publish once, delivered to every live channel matching the mask
sgcWSPServer_sgc1.Broadcast('payload', 'topic1/*');

返回属性