MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)
一种针对移动终端设备的基于TCP/IP的发布/订阅协议
可以连接大量的远程传感器和控制设备
MQTT的特点是可以保持长连接,具有一定的实时性要保持长连接,那么就要不时地发送心跳包,这就不会省电
特点:
使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合
有三种消息发布服务质量(QoS):
“至多一次”,消息发布完全依赖底层 TCP/IP 网络,会发生消息丢失或重复,这一级别可用于对采集数据要求不严格的情况
“至少一次”,确保消息到达,但消息可能会重复发生
“只有一次”,确保消息只到达一次,这一级别可用于要求严格如涉及计费系统的情况,消息重复或丢失都是不允许的
MQTT主题模式:
MQTT是通过主题对消息进行分类的
主题本质上就是一个UTF-8的字符串
主题可以通过反斜杠表示多个层级关系
主题并不需要创建,直接使用就是了
主题还可以通过通配符进行过滤
+可以过滤一个层级
只能出现在主题最后表示过滤任意级别的层级举个例子:
building-b/floor-5:代表B楼5层的设备
+/floor-5:代表任何一个楼的5层的设备
building-b/*:代表B楼所有的设备
MQTT中有3个角色:
发布者Publisher
订阅者Subscriber
代理Broker
MQTT这种结构替代了传统的客户端/服务器模型,可以实现以下解耦:
空间解耦,发布者和订阅者不需要知道对方
时间解耦,发布者和订阅者不需要同时运行(离线消息)
同步解耦,发布和接收都是异步通讯,无需停止任何处理
服务端:
一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介
接受来自客户端的网络连接
接受客户端发布的应用消息
处理客户端的订阅和取消订阅请求
转发应用消息给符合条件的已订阅客户端