概述
1.MQTT协议介绍
1.1简介
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大的优点在于可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。
该协议将消息的发布者(publisher)与订阅者(subscriber)进行分离,因此可以在不可靠的网络环境中,为远程连接的设备提供可靠的消息服务,使用方式与传统的MQ有点类似。
MQTT协议运行于TCP之上,属于应用层协议,因此只要是支持TCP/IP协议栈的地方,都可以使用MQTT
MQTT协议有三种设备,订阅者,发布者,和MQTT代理。(订阅者和发布者都属于客户端)
1.2相关名词
Qos(服务质量等级)
QoS 是消息的发送方(Sender)和接受方(Receiver)之间达成的一个协议:
QoS0 代表,Sender 发送的一条消息,Receiver 最多能收到一次,也就是说 Sender 尽力向 Receiver 发送消息,如果发送失败,也就算了;
QoS1 代表,Sender 发送的一条消息,Receiver 至少能收到一次,也就是说 Sender 向 Receiver 发送消息,如果发送失败,会继续重试,直到 Receiver 收到消息为止,但是因为重传的原因,Receiver 有可能会收到重复的消息;
QoS2 代表,Sender 发送的一条消息,Receiver 确保能收到而且只收到一次,也就是说 Sender 尽力向 Receiver 发送消息,如果发送失败,会继续重试,直到 Receiver 收到消息为止,同时保证 Receiver 不会因为消息重传而收到重复的消息。
dup
重复消息的标志,应该是库能够自动完成的机制,也可以手动修改,但规范里明确的说此标志不能做为判断重复消息的依据
retainde
retain消息可以在订阅方离线时保存,重新上线订阅后既能收到retain消息,但broker端每个主题下只能保存一条retain消息,如果你pub的消息都携带retain标志,broker端就会不停的覆盖,只保留最后一条.
应用的场合:你希望sub方订阅成功后立马执行的控制命令
1.3MQTT多主题订阅
mqtt 的主题一个层级的概念. 我们订阅多个主题就需要用到这个技术点。功能是在主题中引入层次。层次又分主题层级分隔符,多层通配符和单层通配符。需要注意的一点是: 这些层级不能用在发布消息的 Publish 接口中
层级分类
主题层级分隔符: /
多层通配符: #
单层通配符: +
主题层级分隔符
"/" 被用来分割主题树的每一层,并给主题空间提供分等级的结构。当两个通配符在一个主题中出现的时候,主题层次分隔符的使用是很重要的。
例如:
// 主题Topic1: 分了三层/test/child/aaa
// 主题Topic2: 分了四层/test/child/aaa2/bbb2
多层通配符
多层通配符"#"是一个匹配主题中任意层次数的通配符。
例如:
订阅主题: /test/child/#
我们将收到这些主题发送来的消息:
/test/child
/test/child/aaa
/test/child/ccc
/test/child/aaa/bbb
/test/child/aaa/bbb/ddd
多层通配符可以理解为大于等于0的层次。
多层通配符只可以确定当前层或者下一层
单层通配符
单层通配符 "+" 只匹配主题的一层
例如:
订阅主题: /test/child/+
我们将收到这些主题发送来的消息:
注意:接收不到 /test/child 主题发送的消息
/test/child/aaa
/test/child/bbb
/test/child/ccc
小结
订阅的主题名可以当成层级目录来理解。主题层级就类似于目录层级,多层通配的#可以表示任意的目录层级,单层通配符的+表示只在当前层级可哟使用任意名字来通配。
只要符合这些通配符通配范围内的主题层级名就都会被接收。
可以参考https://www.cnblogs.com/shuiche/p/12630606.html。
2.MQTT通信实验
实验思路,利用MQTT Broker在电脑本地建立一个MQTT服务器,然后使用MQTT.fx客户端连接这个服务器然后两个客户端一个发布一个订阅。
2.1搭建MQTT服务器(emqx)
1.下载MQTT Broker。
从https://www.emqx.io/cn/mqtt/public-mqtt5-broker下载MQTT Broker。
因为使用的windows系统,下载对应版本工具:emqx-windows-v4.1-rc.2.zip
另外,上述链接的访问出现问题可以直接百度搜索emqx-windows-v4.1-rc.2.zip,一般都可以搜到并下载。
下载后目录如下图所示
2.打开CMD,进入bin文件,启动emqx服务器并查看运行状态
注意要在英文路径才能使用
C:UsersJYC>H:
H:>cd 2345Downloadsemqxbin
H:2345Downloadsemqxbin>emqx start
H:2345Downloadsemqxbin>emqx_ctl status
3.进入MQTT服务器控制台
确保emqx已正常运行后,可在浏览器中输入:http://127.0.0.1:18083
用户名:admin
密码:public
如果密码不对可以在/etc/plugins/emqx_auth_username.conf里面查看或者修改用户名和密码
如果要修改服务器端口,需要在/etc/emqx.conf里面修改,找到Listeners即可配置端口,然后再重启服务即可
2.2MQTT客户端
1.下载安装MQTT.fx工具
可到官网 Download 下载想要的版本
2.设置MQTT连接的参数
点击设置图标按钮
点击左下角的+号新建连接
设置当前客户端的名字和连接的类型,可以不修改使用默认的
设置地址为127.0.0.1,因为开启的MQTT服务在本地开启的
设置服务器的端口,可以不修改
设置Client ID,随便设置,但是同一服务器下的设备的ID不能一样
Connection Timeout 超时时间设置(s),默认即可
Keep Alive Interval 心跳包间隔时间(s),默认即可
若有账户要求,切换到User Credentials设置用户名和密码即可
修改好参数以后点OK或者Apply都可以
3.然后返回到主界面,切换到自己刚刚建立的链接并点击Connect建立连接
4.订阅消息
按下图所示步骤设置订阅主题为topic0,Qos(服务质量等级)选择Qos0
设置好后,点击"topic0"后面的Subscribe按键。
此时订阅成功
5.发布消息
切换到PUblic界面,发布一条上一步中订阅的主题为“topic0”的消息;消息内容为“topic0 hahaha”;Qos同样设置为Qos0。
设置完后点Publish即可
6.查看已订阅消息
切换到Subscribe界面,右边可以看到发布的消息
对于订阅和发布消息必须是一个订阅(接收消息)一个发布(发送消息),如果想要实现双工,一个设备就要同时进行发布和订阅(两个主题)
个人博客:人间惊鸿客
最后
以上就是听话诺言为你收集整理的MQTT协议及通信测试1.MQTT协议介绍2.MQTT通信实验的全部内容,希望文章能够帮你解决MQTT协议及通信测试1.MQTT协议介绍2.MQTT通信实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复