MQTT规范明确声明:
“体育/+”与“体育”不匹配,但与“体育/”匹配。“体育运动/#”也与单数“体育”相匹配,因为#包括父级。
但是“体育/#”也与“体育/”相匹配吗?规范使得这个问题变得非常模糊。
顺便说一下,还有谁认为允许拖尾斜线是一个非常糟糕的设计决策呢?
发布于 2021-04-28 19:38:24
#
匹配零个或多个进一步的元素,因此对sport/#
的订阅将匹配sport/
这很容易在蚊子/蚊子酒吧被检测到。
出版:
$ mosquitto_pub -t "sport/" -m "foo"
订阅:
$ mosquitto_sub -v -t "sport/#"
sport/ foo
发布于 2021-04-29 00:15:48
是的,sport/#
和sport/
匹配。规范的一个令人困惑的方面是,与文件和目录名称不同,主题级别可以是空字符串。
说明书上写着:
4.7.1.1主题级分隔符
正斜杠(‘/’U+002F)用于分隔主题树中的每个级别,并为主题名称提供层次结构.相邻的主题级别分隔符表示零长度的主题级别。
这意味着sport/
被解析为不是一个,而是两个主题级别-- sport
和空字符串--因此sport/#
中的#
与第二个空字符串主题级别匹配。这与sport/+
匹配sport/
的原因相同-- +
匹配空字符串级别。
https://stackoverflow.com/questions/67305260
复制相似问题