MQTT-mosquitto 的 ubuntu16.04 安装订阅与发布操作 | 学习笔记

简介: 快速学习 MQTT-mosquitto 的 ubuntu16.04 安装订阅与发布操作

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:MQTT-mosquitto 的 ubuntu16.04 安装订阅与发布操作】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11175


MQTT-mosquitto 的 ubuntu16.04 安装订阅与发布操作

内容介绍:

一、MQTT 的发展历程及其广泛应用

二、Mosquitto 的源码的下载

三、安装完 mosquitto 之后,通过测试的方法

四、最简单的订阅命令

五、通信质量为 q1 或 q2,通信过程中的区别

六、订阅的步骤

 

一、MQTT 的发展历程及其广泛应用

本节课重点学习 MQTT 在实际互联网开发中的应用。首先,对于 MQTT 来说它的应用软件是非常多的,MQTT 出现的时间比较早,九十年代初就已经存在了,经历了这么多年的发展,在最近这几年开始特别火,在物联网得到了更广泛的应用,在这个地方只是列举了一部分能过实现 MQTT 协议的开发软件,接下来要讲 mosquitto 还有 ApacheApollo,那这里面还有一些没有列举到,比如说 Apollo,这些开发软件多可以在网上找到。

image.png

总之,本节学习排在第二名的 mosquitto ,mosquitto 是一个质量非常高的开发软件,而且支持最高版本 v3.3.1 的协议,并且它是 c 语言写出来的,提过了一个动态链接库,去做一些二次开发也可以基于源码去做二次开发。包括做一些优化。选择 mosquitto 还有一个非常重要的原因 mosquitto 由 MQTT 协议创始人之一的 Andy Stanford-Clark 参与开发。因为由作者的加持,所以软件不会很差,资料也很丰富。

 

二、mosquitto 的源码的下载

下载 mosquitto 的源码直接登陆官网:https://mosquitto.org。在这里先不去登录官网去下载源代码,因为 MQTT 的协议当前用的很多,所以说是 ubuntu,官方仓库就会有安装包。如果是 ubuntu环境,首先去执行 sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa 命令,也就是在库里添加mosquitto 的安装包并且更新安装库的列表 (sudo apt-get update),然后执行 sudo apt-get install mosquitto 直接执行 mosquitto 就可以。也就是在虚拟器当中去执行就可以 ( 1.6.8 是目前的最新版本)。执行完 sudo apt-get install mosquitoo 之后,只是完成了服务器的下载安装,也就是只能启动一个服务器。但是对客户端来说 sudo apt-get install mosquitoo 是没有的比如说要发布,订阅是没有的。还要下载 sudo apt-get install mosquitto-clients 。安装完之后对安装包提供了一些指令,本身要降低对 MQTT 的使用以及发布和订阅的使用,建议多用命令去操作,后面进行移植之后,也可以根据源码开发。

image.png

 

三、安装完 mosquitto 之后,通过测试的方法

安装完之后第一步如果要完成一个测试,最简单的就是首先要执行 mosquitto -c /etc/mosquitto/mosquitto.conf  -p 1883 指令。后面的端口号“1883”加与不加都可以。通过 mosquitto -c   /etc/mosquitto/mosquitto.conf 指令去启动服务器。也就是 mosquitto 就是服务器,然后输入 which mosquitto 去执行 mosquitto -c 这时就不用输入“/”因为安装完环境就变为自动就有了。-c 的作用是指定配置文件 etc/mosquitto/mosquitto.conf  的入径。配置文件是默认安装在 etc/mosquitto/mosquitto.conf  ,这样就表示已经启动起来了,并且如果不传递端口号 1883,默认的端口号就是 1883. 由于服务器处于注册状态,需要去完成发布和订阅,建议再打开两个终端号。这样服务器就没有办法输入东西了。

 

四、最简单的订阅命令

接下来来看最简单的订阅命令就是 mosquitto_sub-t“temp”,mosquitto_sub 这就是订阅指令,参数 -t  是订阅的主题,就相当于要去订阅一篇文章那这篇文章的主题就是 -t。可以加上“”,也可以不加,比如说名字是叫做 temp , 名字可以随便起,之前讲过名字不需要经过提前定义,随时可以在使用的时候去定义就可以了。 mosquitto_sub-t temp 处于注册的状态,订阅这个主题等待有人发布关于此主题的内容。这是在另外一个终端,在服务端看看有没有更多消息的输出,服务端在这时就打印了 New connection from 127.0.0.1 on port 1883.    New client connected from 127.0.0.1 as mosq-cs1N8qIK4wtzd0qjux(p2,c1,k60) 这样的信息,这是之前打的表示服务器客户端都在同一台主机上面,相当于是一个回环来自 127.0.0.1 连接到了本地。包括里边有一些基本信息 mosq-cs1N8IK4wtzd0qjux(p2,c1,k60)。这时发布一个消息 pub ,pub 也是通过 -t 来指定主题。除了主 t 之外,还通过 -m 来指定内容。那样就再加上内容 -m hello。所以发布方发布完就会退出。再打开服务器的界面发现又有一个新的客户端连接上了。服务器中出现 disconnected 就表示服务器已经断开了。客户端的内容 hello 已经被接收到了。在订阅的时候还可以多加一些参数,加一个 -v 这是显示的内容就可以更多一些,比如再换一个内容叫做 “hehe”,那么 android2 就会显示出 “hehe”属于 temp 主题,这就相当于信息更加丰富些。也可以指定主机通过 -h,在服务器输入本机的主机的 ip192.168.1.13 这就是指定的主机。在 android2 显示收到了两个 “he he” ,这时在服务器中已经发生变化,已经连接到了192.168.1.13 ,之前是回环现在是特定的 ip 。当然还可以指定端口,端口默认的就是 1883。对于接收方也一样,也可以指定主机和端口。还可以改变通信质量,将通信质量改为 q1,也同样可以接收到。还可以指定 q2。

image.png

 

五、通信质量为 q1 或 q2,通信过程中的区别

不管指定什么方式,通信过程中的区别是什么,可以先让服务器退出,然后重新启动服务器,再加一个参数 -d,原因是输入 mosquitto --help  会出现一些内容,在服务器中 -d 不是调试的意思。打开服务器后,对于客户端,在订阅消息的时候再多加一个参数 -d。再加了 -d 之后服务器没有明显的现象,但是对于客户端来说就发送了连接请求 (sending CONNECT)。而且这个过程完全可以对照通信过程或者是手册里面的14种报文。比如说 CONNECT 连接,客户端请求连接服务端,然后 sending,received。

 

六、订阅的步骤

接下来是开始订阅,订阅之前第一步就是连接 SUBSCRIBE,SUBSCRIBE 客户端订阅请求,服务器回了一个SUBACK,随后就开始发 PINGREQ(心跳包),sending PINGREQ 是发送给服务器的心跳包, received PINGRESP 是服务器回过来的。超时后就会发一次心跳包,保证一直处于连接状态。另一边的客户端也一样,假设以 q 0-d,然后可以看到之前发送的 hehe,连接的服务器,服务器给了一个连接应答。PUBLISH 就是消息, d0,q0,r0,m1 是参数,‘temp’, ...(4 bytes ) 是它的主题,发送出去然后断开。在客户端收到了 hehe。

image.png

这时把质量提高将 q0 变为 q1,之前是没有应答 (PUBACK)的,变为 q1 之后出现了应答正好就是通信的过程。再将 q1 改为 q2,改为 q2 之后信息变得更大,服务器在收到之后做了一个记录(RUBREC),并且在发送一个释放,再回一个完成。在 2android2 也有收到。

image.png

这是将订阅方退出,此时是没有订阅的,再以 q2 订阅一次与之前是一样的,依然有一个结束应答 (PUBCOMP),因此并不代表通信质量是 2 的时候,订阅方是一定存在的,订阅方可以不存在。

image.png

也就是现在连接客户端不会输出订阅的消息。因为 DISCONNECT 断开就默认客户端取消了订阅。它指的是订阅了只是暂时不在线而已,这就是整个通信过程通过 pub 可以详细的看到数据的传送过程,也就验证了之前的三种通信质量,这就是  mosquitto 最基本的操作。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
29天前
|
并行计算 Ubuntu Linux
Ubuntu学习笔记(五):18.04安装多版本CUDA
这篇博客文章介绍了在Ubuntu 18.04系统上如何安装和切换不同版本的CUDA,以及如何安装不同版本的cuDNN。
149 2
|
28天前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
2566 3
|
22天前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
79 4
Linux系统之Ubuntu安装cockpit管理工具
|
27天前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
114 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
27天前
|
Ubuntu Linux C语言
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
本文介绍了在Ubuntu 18.04系统上编译安装OpenCV 3.4.0及其扩展包opencv_contrib 3.4.0的详细步骤,包括下载源码、安装依赖、配置CMake和编译安装,以及常见问题的解决方法。
70 1
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
|
24天前
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
77 1
|
27天前
|
Ubuntu Linux
软件安装(五):Ubuntu 18.04安装Teamviewer 看一遍就会
这篇文章介绍了在Ubuntu 18.04系统上通过图形界面和命令行两种方法安装TeamViewer远程控制软件的步骤。
26 2
|
27天前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
68 1
|
27天前
|
Ubuntu
Ubuntu学习笔记(七):ubuntu下jupyter指定虚拟环境
本文介绍了如何在Ubuntu系统下使用Anaconda和Jupyter Notebook指定并切换不同的虚拟环境。
67 0
Ubuntu学习笔记(七):ubuntu下jupyter指定虚拟环境
|
9天前
|
消息中间件 Ubuntu Java
Ubuntu系统上安装Apache Kafka
Ubuntu系统上安装Apache Kafka
下一篇
无影云桌面