mqtt简介及在web端的应用(接入阿里iot)

简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)通俗来讲是一个基于客户端-服务器的消息发布/订阅(publish/subscribe)模式的"轻量级"通讯传输协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。

 

优势

(1)精简,不添加可有可无的功能;

(2)发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递;

(3)允许用户动态创建主题,零运维成本;

(4)把传输量降到最低以提高传输效率;

(5)把低带宽、高延迟、不稳定的网络等因素考虑在内;

(6)支持连续的会话控制;

(7)理解客户端计算能力可能很低;

(8)提供服务质量管理;

(9)假设数据不可知,不强求传输数据的类型与格式,保持灵活性。

 

应用场景

以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT协议原理

csdn:https://blog.csdn.net/jiesa/article/details/50635222 (比较详细,直白)

 

在web端的应用

1、mqtt下载

1、npm引入

npm install mqtt --save

 

2、CDN引入

https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js

https://unpkg.com/[email protected]/dist/mqtt.min.js; min版

 

3、本地引入下载地址

https://github.com/mqttjs/MQTT.js

 

4、接入阿里iot(物联网)平台的文档

https://help.aliyun.com/document_detail/63656.html?spm=a2c4g.11174283.6.651.25931668Dl46PQ

 

5、案例参考

https://github.com/mqttjs/MQTT.js/blob/master/examples/wss/client.js

 

注意事项

1、clientId随机性

症状:clientId每次连接必须不一样,否则连接超过一次后后面会出现连接异常,

原因:client id重复连接断开,broker反复踢掉client,导致系统反复重启。

 

2、不能再不同场景使用一个账号连接,一般出现再测试开发阶段

症状:反复重连,断开,导致消息接受遗漏

原因:client用户同时不同环境(A和B)重复连接,阿里针对client用户这一问题,采取限流方式,当client用环境A连接,这时又在环境B中连接,这时会把环境A中的mqtt强制断开,但mqtt有重连功能,所以有重连,又把环境B中的挤掉,导致环境A和B都在重复断开连接的状态

 

3、消息订阅/发布服务质量等级建议qos1

Qos0

发送者只发送一次消息,不进行重试,Broker不会返回确认消息。在Qos0情况下,Broker可能没有接受到消息

Qos1

发送者最少发送一次消息,确保消息到达Broker,Broker需要返回确认消息PUBACK。在Qos1情况下,Broker可能接受到重复消息

Qos2

 Qos2使用两阶段确认来保证消息的不丢失和不重复。在Qos2情况下,Broker肯定会收到消息,且只收到一次

Qos1 VS Qos2

与Qos1相比,Qos2的开销会很大,因为Broker有额外的两个动作:

去重。为了保证消息不重复,Broker必须进行去重处理;

确保响应消息PUBREC到达客户端。Broker必须等待客户端对PUBREC消息的响应PUBREL,只有收到客户端的确认消息后,Broker才能对订阅者投递消息。

所以相比较建议选Qos1

 

4、mqttPassword密码加密 必须按字母顺序排序而且阿里文档提供的是java的HmacSHA1加密方式前端必须自己引入HmacSHA1(哈希1加密)文件在进行加密。

 

hmac-sha1加密下载地址:https://blog.csdn.net/disadministrator/article/details/81813738

 

而且加密的方法也有不同

阿里文档的java的HmacSHA1方式是sign_hmac(deviceSecret,content)。

前端文档的HmacSHA1方式是sign_hmac(content,deviceSecret)。

 

5、mqtt.js不仅仅可以完成阿里平台上设备信息的上报和下发,也可以代替websockt,进行其他自定义通信(服务端与前端约定好通信协议)。

 

你可能感兴趣的:(mqtt,阿里iot中mqtt的使用)