TsgcWSPServer_sgc › 属性 › UseMatchesMask
启用掩码方式匹配频道名称,而不是精确字符串匹配。
property UseMatchesMask: Boolean read FUseMatchesMask write FUseMatchesMask;
False
UseMatchesMask 是一个仅运行时属性,未在对象查看器(Object Inspector)中发布,因此只能在代码中设置。它是 public,而非 published。
默认情况下,频道参数(在 Subscribe、Broadcast、Publish 等方法中)通过精确字符串比较与连接的订阅进行匹配。当 UseMatchesMask 为 True 时,服务器会改为将频道参数作为 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/*');