最近在做机器人联网方向的工作。于是利用下班时间把之前 搭建的 MQTT demo 重新温习一遍。也借此把自己的技术极客再丰富一下。
MQTT
应该是当今世界上最受欢迎的物联网协议了,没有之一。
MQTT主要应用在车联网,智能家居、即时聊天应用和工业互联网
等领域。
目前MQTT连接的设备已经过亿,这些都得益于MQTT为设备提供了稳定、可靠、易用
的通信基础。
MQTT跟HTTP类似,但由于轻量简单的传输效率可能是后者的10倍,所以也逐渐成为了物联网领域的最佳选择。
*** 其实你们可能用过MQTT,比如:你用手机解锁一辆共享单车的时候…… ***
今天我依然会要用尽可能简单易懂的文字来写这篇笔记。尽量做到入门小白也能看懂的程度。
也是 防止自己淡忘,容易重新激起记忆联想。
什么是MQTT?
官网的解释是:MQTT是一个客户端服务架构的发布/订阅模式的消息传输通信协议……(此处省略500字)
*** 讲人话 *** – 通信协议就是一种沟通方式,好比中国各地都有方言,但为了更好与人的打交道,我们会尽量说普通话。那普通话就是我们沟通的通信协议。
MQTT使用Publish/Subscribe
发布订阅机制的通讯协议
*** 讲人话 *** – 就是要把 发布消息的人
和 收到消息的人
给分开 通过一个中间人
来沟通。
- 我们先来代入一个情境:
- 我是短视频UP主 —— (Publisher)
- 关注我的人 —— (Subscriber)
- 短视频平台 —— (Broker)
- 当我发一条短视频的时候,短视频平台(Broker) 就会把我的视频推送给关注我的人。
*** 一、 讲到这里 MQTT 的三个重要角色就出现了*** (注意!不是刘关张)
发布者
Publisher
订阅者
Subscriber
代理人
Broker
需要注意的是 这里
发布者
和订阅者
可以是任何装置,而
代理人
是一台服务器,用来接收发布者所发布的消息,把信息储存下来同时依照主题
发布给所有该主题
的订阅者
,代理人会将消息储存下来,所以当发布者突然间断线,也可以记住最后的状态
*** 二、主题 topic
***
Topic是消息发布(Pub)者和订阅(Sub)者之间的传输中介。设备可通过Topic实现消息的发送和接收,从而实现服务端与设备端的通信。为方便海量设备基于Topic进行通信,简化授权操作,物联网平台定义了产品Topic类和设备Topic。本文介绍产品和设备Topic的定义、使用和分类。
Topic类:产品维度的Topic,是同一产品下不同设备的Topic集合。一个ProductKey下有多个Topic类。一个Topic类对一个ProductKey下所有设备通用。
*** 讲人话 *** – 就是topic利用斜线(/)来分隔不同的层级,对于使用时,其实是没有太大的硬性规定
,通常用来让我们区分不同的区域
,或者是不同的类型
的装置,来让我们分辨该装置是放在什么位置,或着是什么类别的内容.
例如我们可以像是这样,我家的客庭里面有个电灯,还有感应器
那topic传递的层级就是:`家/客厅/电灯`,`家/客厅/感应器`
但是各个层级的名称呢还是有一些细节必须要注意:
1. 最好不要使用中文。虽然可以用,但是为了避免编码的问题还是建议不要使用更好
2. 最好不要使用空白,虽然有时候使用空格没有问题,甚至你可以什么都不输入使用空层级,但为了编码时更容易理解他们代指着什么尽量用语义化的拼写规则
3. 不能使用($) (#) (+)等特殊字符,也最好不要使用符号来当层级的名称
4. 名称的长度不能超过2的16次方个字节
*** Payload承载的消息 ***
payload 就是你发布的消息内容,一般会是Sting字符串或是 JSON类型,
- 要注意的是不要传送超过256MB的内容
一般来说我们只要知道会传送的是什么内容,在获取或者控制时使用相对应的格式就好
*** QoS(Quality of service)服务质量 ***
MQTT的QoS只有3个值可以设定
- 分别是0最多传送一次 —
QoS = 0
— 可能会漏传,但速度最快 - 最少传送一次 —
QoS = 1
— 可能多传 速度适中 - 确实的传送一次 —
QoS = 2
— 肯定会收到 速度最慢
- 分别是0最多传送一次 —
这里底层复杂的原理我们都不需要去了解,只要想好什么情况要用哪一种服务品质就好
- 纸上得到终学浅, 我们动手试一下
现在我们来看看在vue中,怎么样可以用websocket
和mqtt
在网页跟你的硬件设备做交互
这里首先默认大家都已经熟悉掌握了如何用js, vue, 和vuecli等等等等相关技术栈,
用脚手架搭建项目框架后。启动你的本地服务,
首先安装 mqtt库 我本地是用^4.3.7
版本
1 | npm install mqtt |
话不多讲直接撸代码
1 | // do someting... 此处省略一万行代码 |
1 | // do someting... 此处省略一万行代码 |
今天先写到这吧。咱们有空再续 …… 至于什么有空?看缘份吧
- 本文作者: 林杰
- 本文链接: http://linjiefe.github.io/2023/04/12/MQTT/