• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go语言的MQTT服务器(二)----- 主题(1)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

go语言的MQTT服务器(二)

主题topic

发布订阅必须要有主题,当订阅了某个主题后,才能收到这个主题的payload。
MQTT通过“主题”实现将消息从发布者客户端送达至接收者客户端。“主题”是附加在消息上的一个标签,发布者客户端将“主题”和“消息”发送至代理服务器(mqtt broke),代理服务器将该消息转发至每一个订阅了该“主题”的订阅者客户端。

主题通配符

1 . 主题层级分隔符—“/”
主题层级分隔符使得主题名结构化。如果存在分隔符,它将主题名分割为多个主题层级。斜杠(‘/’ U+002F)用于分割主题的每个层级,为主题名提供一个分层结构。当客户端订阅指定的主题过滤器包含两种通配符时,主题层级分隔符就很有用了。主题层级分隔符可以出现在主题过滤器或主题名字的任何位置。相邻的主题层次分隔符表示一个零长度的主题层级

如下面主题:
topic/room
topic/room/contrl/light
topic/room/contrl/computer
topic/air/sensor

2 . 多层通配符—“#”
“#”是用于匹配主题中任意层级的通配符。多层通配符表示它的父级和任意数量的子层级。多层通配符必须位于它自己的层级或者跟在主题层级分隔符后面。不管哪种情况,它都必须是主题过滤器的最后一个字符 .

例如,如果客户端订阅主题 “topic/#”,它可以收到使用下列主题名发布的消息:
topic
topic/room
topic/room/contrl/computer
topic/air/sensor

“#” 是有效的,会收到所有的消息。
“topic/room#” 是无效的
”topic/room/#/computer" 是无效的

3 . 单层通配符—-“+”
加号是只能用于单个主题层级匹配的通配符。在主题过滤器的任意层级都可以使用单层通配符,包括第一个和最后一个层级。然而它必须占据过滤器的整个层级 。可以在主题过滤器中的多个层级中使用它,也可以和多层通配符一起使用。

“topic/+” 只能匹配 china/guangzhou
“topic/+/+/room” 能匹配topic/a/b/room和topic/c/d/room等等类似的主题

通配符 —“ $ ”
通配符“$”表示匹配一个字符,只要不是放在主题的最开头,即:

$ xx
/ $ xx
/xx$
其它情况下都表示匹配一个字符。

如果客户端想同时接受以 “SYS/”开头主题的消息和不以SYS/开头主题的消息, 它需要同时订阅 “#” 和 ““$SYS/#”。

注意

注: 单层通配符和多层通配符只能用于订阅(subscribe)消息而不能用于发布(publish)消息,层级分隔符两种情况下均可使用。

总结

  • 所有的主题名和主题过滤器必须至少包含一个字符
  • 主题名或主题过滤器以前或后置斜杠 “/” 区分
  • 只包含斜杠 “/”的主题名或主题过滤器是合法的
  • 主题名和主题过滤器是 UTF-8 编码字符串, 它们不能超过 65535 字节
  • 主题名和主题过滤器是区分大小写的

简单应用
‘’/‘’ 可以应用到:部门层级推送、城市层级推送等包含层级关系的场景
配合其它通配符可以实现广播
单独确定的主题可实现单播

常见智能家居交互图(在网上随便找的)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go select发布时间:2022-07-10
下一篇:
Go语言中的map(十一)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap