最近在着手研究使用网页控制硬件的交互过程,发现mqtt协议有很多种语言的封装,整个思路也很清晰,就是一个客户端进行发布和订阅+服务器中间代理的过程,于是开始学习使用MQTT框架搭建交互平台。
客户端使用了MQTT.js,服务器使用mosca(基于nodejs)。
一、了解MQTT基本知识
1.在MQTT通讯过程中,有三种身份,分别是发布者(publisher)、代理(broker)、和订阅者(subscriber)。
2.MQTT传输的消息分为:主题(topic)和负载(payload)两部分:
Topic,为消息的类型,是由客户端发布时指定的,当另外一个客户端订阅(subscribe)主题后,就会收到该主题的消息内容(payload)。
payload当然就是内容了,它和主题一样都存在数据包(packet)中。
3.当应用数据通过MQTT网络发送时,MQTT会把与之相关的服务质量(QoS)和主题名(Topic)相关连。
qos 0 “至多一次”,由于消息发布完全依赖底层 TCP/IP 网络,会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
qos 1 “至少一次”,确保消息到达,但消息重复可能会发生。
qos 2 “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
MQTT.js只是支持了MQTT协议,并没有支持QoS,也就是说,只支持最低级别的“至多一次”(QoS0)。
4