MQTT:sport/#与sport/(带尾随斜杠)匹配吗?
MQTT规范明确指出 “sport/+”与“sport”不匹配,但与“sport/”匹配 “sport/#”也与单数“sport”匹配,因为#包括父级 但是“运动”和“运动”也一样吗?规范对此完全不明确MQTT:sport/#与sport/(带尾随斜杠)匹配吗?,mqtt,Mqtt,MQTT规范明确指出 “sport/+”与“sport”不匹配,但与“sport/”匹配 “sport/#”也与单数“sport”匹配,因为#包括父级 但是“运动”和“运动”也一样吗?规范对此完全不明确 顺便说一句,还有谁认为允许后面的斜杠是一个非常糟糕的设计决定?这个匹配零个或更多的元素,所以sport/的订阅将匹配sport/ 这很容易通过mosquitto_sub/mosquitto_pub进行测试 出版: $ mosquitto_pub -t "sport/" -m
顺便说一句,还有谁认为允许后面的斜杠是一个非常糟糕的设计决定?这个
匹配零个或更多的元素,所以sport/
的订阅将匹配sport/
这很容易通过mosquitto_sub/mosquitto_pub进行测试
出版:
$ mosquitto_pub -t "sport/" -m "foo"
订阅:
$ mosquitto_sub -v -t "sport/#"
sport/ foo
是的,sport/#
匹配sport/
。该规范令人困惑的地方在于,与文件名和目录名不同,主题级别可以是空字符串
说明书上说:
4.7.1.1主题级分隔符
正斜杠(“/”U+002F)用于分隔主题树中的每个级别,并为主题名称提供层次结构相邻主题级别分隔符表示零长度主题级别
这意味着
sport/
不是解析为一个主题级别,而是解析为两个主题级别--sport
和空字符串--sport/
中的#
与第二个空字符串主题级别匹配。这与sport/+
匹配sport/
的原因相同,+
匹配的是空字符串级别。我基本上是这样想的,“零或更多元素”,但它也匹配sport
,与sport/
相比,这有点像是小于零,因此,我希望规范能够清楚地说明它,如果另一个库与sport/
不匹配,那么在规范没有完全清楚的情况下,这是一个有缺陷的库,这将是有争议的。因此,我想知道在一些其他官方文档中是否有任何澄清,而不是观察到的行为?好的,阅读规范的其他部分,我知道sport/
实际上有两个“主题级别”-sport
和空字符串,因此在这种情况下sport/
中的
实际上与空字符串主题级别相匹配,而不是零主题级别。