MQTT: Topic Names and Topic Filters

2024-09-03 05:20
文章标签 mqtt names topic filters

本文主要是介绍MQTT: Topic Names and Topic Filters,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Topic Names and Topic Filters

Topic wildcards


Topic Name 和 Topic Filter 的区别就是 Topic Name 不能包含通配符,而 Topic Filter 可以包含通配符。

Topic Name 标识一个具体的主题,而 Topic Filter 可以标识一个或者一组主题。


Topic level separator


主题级别分隔符 (topic level separator), 用 / 标识。

/ 用于将结构引入主题名称中。 如果出现主题级别分割符,它将一个字符串的主题名称分割为多个“主题级别”。

两个相邻的/ 标识一个长度为零的主题级别。

它的作用就像文件路径中的路径分隔符。


Multi-level wildcard


多级通配符 (multi-level wildcard), 用 # 标识。

匹配任意多级别的主题, 包括它的父层级和所有子层级。

这个通配符可以单独使用或者跟在主题级别分隔符之后, 而且它必须是当前 Topic filter 的最后一个字符。

例如:

比如一个客户端订阅了主题 "sport/tennis/player1/#", 那么下面这些主题都会被匹配上:- "sport/tennis/player1"- "sport/tennis/player1/ranking"- "sport/tennis/player1/score/wimbledon"
- "sport/#" 与 “sport” 主题也匹配,因为 "#" 可以匹配父层级。
- "#" 也是合法的,它匹配所有的主题。
- "sport/tennis/#" 也是合法的
- "sport/tennis#" 是非法的
- "sport/tennis/#/ranking" 是非法的

Single level wildcard


单级通配符(single level wildcard), 用 + 标识。

匹配单个级别的主题。

可以在任意级别中使用这个通配符。

但是它必须独占当前主题级别。

可以在一个topic filter 中多次使用这个通配符。

可以和多级通配符搭配使用。

例子:

"sport/tennis/+" 
匹配 "sport/tennis/player1" 和 "sport/tennis/player2", 
不匹配 "sport/tennis/player1/ranking" (因为单级通配符只能匹配一个层级,而这里在 tennis 之后有两个层级)"sport/+" 不匹配 "sport", 但是匹配 "sport/"
- "+" 是合法的
- "+/tennis/#" 是合法的
- "sport+" 是非法的
- "sport/+/player1" 是合法的
- "/finance" 匹配 "+/+" 和 "/+", 但是不匹配 "+"

Topics beginning with $


服务器不应该将以通配符开始的 topic filter 与以 $ 开头的 topic name 进行匹配。

服务器应该阻止客户端通过这些 topic 与其他客户端交换消息。

服务器应该使用以 $ 开头的 topic 做其他用途。

比如:以 $SYS/ 开头的主题被广泛的用于提供服务器特定的信息或者控制 API

例子:

- 订阅主题 "#" 的客户端不会收到那些被发布到以$开头的 topic 中的消息。
- 订阅主题 "+/monitor/Clients" 的客户端不会收到那么些被发布到以 "$SYS/monitor/Clients" 主题中的消息。
- 订阅主题 "$SYS/#" 的客户端会收到那些被发布到以 "$SYS/" 开头的主题中的消息
- 订阅主题 "$SYS/monitor/+" 的客户端会收到那些被发布到以 "$SYS/minitor/Clients" 主题中的消息
- 如果客户端想同时收到所有以 $SYS/ 开头的和非 $ 开头的主题中的消息,那么它必须同时订阅主题 "#" 和 "$SYS/#"

Topic semantic and usage


如下规则被应用到 topic name 和 topic filter:

  • topic name 和 topic filter 的长度至少为 1.
  • topic name 和 topic filter 是大小写敏感的
  • topic name 和 topic filter 中可以包含空白字符
  • 前缀,后缀 / 标识一个不同的 topic name 或者 topic filter
  • 只包含一个 “/” 字符的 topic name 和 topic filter 是合法的
  • topic name 和 topic filter 中不能包含空字符(null character, Unicode U+0000)
  • topic name 和 topic filter 使用 UTF-8 编码,编码之后的长度不能超过 65535.
  • topic name 和 topic filter 的层级可以无限深,没有限制

这篇关于MQTT: Topic Names and Topic Filters的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132134

相关文章

ActiveMQ—Queue与Topic区别

Queue与Topic区别 转自:http://blog.csdn.net/qq_21033663/article/details/52458305 队列(Queue)和主题(Topic)是JMS支持的两种消息传递模型:         1、点对点(point-to-point,简称PTP)Queue消息传递模型:         通过该消息传递模型,一个应用程序(即消息生产者)可以

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消

HTTP协议 HTTPS协议 MQTT协议介绍

目录 一.HTTP协议 1. HTTP 协议介绍 基本介绍: 协议:  注意: 2. HTTP 协议的工作过程 基础术语: 客户端: 主动发起网络请求的一端 服务器: 被动接收网络请求的一端 请求: 客户端给服务器发送的数据 响应: 服务器给客户端返回的数据 HTTP 协议的重要特点: 一发一收,一问一答 注意: 网络编程中,除了一发一收之外,还有其它的模式 二.HTT

【知识分享】MQTT实战-使用mosquitto客户端连接emqx服务器

一、简介     MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的通信协议,旨在实现物联网设备之间的低带宽、高延迟的通信。MQTT协议设计简洁,使用TCP/IP协议进行通信,适用于各种网络环境,尤其适合在有限的网络带宽和不稳定的网络连接条件下进行通信。     MQTT的工作原理是基于发布/订阅模式的消息传递,它包括两个主要

基于 RocketMQ 的云原生 MQTT 消息引擎设计

作者:沁君 概述 随着智能家居、工业互联网和车联网的迅猛发展,面向 IoT(物联网)设备类的消息通讯需求正在经历前所未有的增长。在这样的背景下,高效和可靠的消息传输标准成为了枢纽。MQTT 协议作为新一代物联网场景中得到广泛认可的协议,正逐渐成为行业标准。 本次我们将介绍搭建在 RocketMQ 基础上实现的 MQTT 核心设计,本文重点分析 RocketMQ 如何适应这些变化,通过优化存储

MQTT协议中信息长度MSG len字段分析

截图自: 主要是说数据字节长度的计算: 每个字节由1个持续位和7个数据位组成:如果持续位为1,表示接下来的一个字节仍然表示长度的一部分 7个数据位表示的数据     0-127   共计128个数字 所以如上图的表格所示 1个字节,2个字节,3个字节,4个字节的数据范围 切记:MQTT长度的表示范围 最多使用4个字节  故这里存在着数据长度的限制  (不过真心牛掰! 试试Q

MQTT broker搭建并用SSL加密

系统为centos,基于emqx搭建broker,流程参考官方。 安装好后,用ssl加密。 进入/etc/emqx/certs,可以看到 分别为 cacert.pem CA 文件cert.pem 服务端证书key.pem 服务端keyclient-cert.pem 客户端证书client-key.pem 客户端key 编辑emqx配置:vim /etc/emqx/emqx.conf,添加s

构建智能门禁安防系统:树莓派 4B、OpenCV、SQLite 和 MQTT 的应用(代码示例)

一、项目概述 1.1 项目目标和用途 本项目旨在开发一个智能门禁安防系统,该系统利用摄像头和人脸识别技术,结合本地人脸库,实现对进出人员的自动识别和管理。系统能够实时记录进出人员的信息,并对未注册人员进行警报提示。通过与物联网平台的集成,用户可以远程监控和管理门禁系统,提升安全性和管理效率。 1.2 解决的问题和价值 传统的门禁系统往往依赖于钥匙或密码,存在安全隐患和管理不便的问题。本项目

MQTT.js 简述

MQTT.js 简述 简介 MQTT 是一种轻量级的消息传输协议,常用于物联网(IoT)设备间的通信。mqtt.js 是一个 JavaScript 库,支持在 Node.js 和浏览器中使用,用于通过 MQTT 协议与 MQTT Broker 进行通信。 安装 在 Node.js 中,可以通过以下命令安装: npm install mqtt --save 在浏览器中使用: <s

鹏程万里----mqtt

今天测试ubuntu安装mqtt服务器,其他都没啥说的,就是测试的时候 订阅里不要加-v,不然就会出现收不到数据 mosquitto_sub -h 192.168.10.80 -t "mqtt" 既然要搞mqtt那就必须得有个数据库来做数据持久化,于是我在ubuntu上装了个mongodb,遇到一点小问题 修改ip让外部能够访问,得修改./etc/mongodb.conf文件里的ip,