当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > MQTT代理搭建

MQTT代理搭建 时间:2018-09-29      来源:未知

近接触MQTT协议,MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)协议是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT的特色

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

MQTT协议当前版本为,2014年发布的MQTT v3.1.1。除标准版外,还有一个简化版MQTT-SN,该协议主要针对嵌入式设备,这些设备一般工作于百TCP/IP网络,如:ZigBee。

MQTT协议运行在TCP/IP或其他网络协议,提供有序、无损、双向连接。其特点包括:

1. 使用的发布/订阅消息模式,它提供了一对多消息分发,以实现与应用程序的解耦。

2. 对负载内容屏蔽的消息传输机制。

3. 对传输消息有三种服务质量(QoS):

4. 数据传输和协议交换的小化(协议头部只有2字节),以减少网络流量

5. 通知机制,异常中断时通知传输双方

服务质量

接下来我们来了解一下MQTT的服务质量,为了满足不同的场景,MQTT支持三种不同级别的服务质量(Quality of Service,QoS)为不同场景提供消息可靠性:

o 多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络。即:<=1

o 至多一次,这一级别会确保消息到达,但消息可能会重复。即:>=1

o 只有一次,确保消息只有一次到达。即:=1。在一些要求比较严格的计费系统中,可以使用此级别

MQTT实现原理

MQTT可以理解主要由两端构成网络,一端是服务器端,另一端就是客户端。

而客户端又分两个角色,一个是订阅者、另一个是发布者,服务器则是代理,流程如下:

订阅者首先在代理那订阅主题,发布者发布该主题内容时,订阅者才会收到,否则不会接收任何信息。

MQTT本身的消息也分为令部分:主题(Topic)和负载(payload)。

o Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)

o payload,可以理解为消息的内容,是指订阅者具体要使用的内容

MQTT代理搭建(Linux下搭建)

我们在上面了解了一下MQTT,具体的协议可以去官网//mqtt.org查看,而这些知识只是协议的介绍,下面我们来了解一下如何搭建MQTT网络,mosquitto是MQTT的开源代理,遵循的是MQTT v3.1.1协议。下面我们搭建代理。

2 # 下载源代码包

wget //mosquitto.org/files/source/mosquitto-1.4.12.tar.gz

 shell Code 

2 # 解压

tar zxfv mosquitto-1.3.4.tar.gz

 shell Code 

2 # 进入目录

cd mosquitto-1.3.4

 shell Code 

2 # 编译

make

 shell Code 

2 # 安装

sudo make install

遇到下属问题的解决办法:

 idea Code
【1】编译找不到openssl/ssl.h

【解决方法】——安装openssl

sudo apt-get install libssl-dev

【2】编译过程找不到ares.h

【解决方法】——修改config.mk中的WITH_SRV:=yes,改为WITH_SRV:=no

【3】使用过程中找不到libmosquitto.so.1

error while loading shared libraries: libmosquitto.so.1:

cannot open shared object file: No such file or directory

【解决方法】——修改libmosquitto.so位置

# 创建链接

sudo ln -s /usr/local/lib/libmosquitto.so.1/usr/lib/libmosquitto.so.1

# 更新动态链接库

sudo ldconfig

【4】make: g++:命令未找到

【解决方法】

安装g++编译器

sudo apt-get install g++

MQTT代理的搭建(windows下搭建)

Mosquitto有两个模式,一个是win32,一个是cygwin,下面是下载地址:

mosquitto-1.0.3-install-win32.exe(743 kB) (Native build, Windows Vista and up)

mosquitto-1.0.3-install-cygwin.exe(2,026kB)(Cygwin build, Windows XP and up)

安装win2版本

win32直接下载到本地,安装即可。

如果缺少libeay.dll 、 pthreadVC2.dll、ssleay.dll等库文件,需要下载到本地同级目录再进行安装。

安装cygwin版本

而安装cywin是需要下载cygwin,下面是下载地址

mosquitto-1.0.3-install-cygwin.exe

Mosquitto依赖的lib有binutils、gcc4-core、gcc4-gcc、libwrap-devel、libwrap0、make、mercurial、wget。

后安装mosquitto-cygwin软件,可以在任务管理器中启动mosquitto服务。

MQTT设置用户密码(windows和Linux相同,这里以;Linux为例)

在 /etc/mosquitto/mosquitto.conf 文件中需配置是否允许匿名用户、用户存储的用户名密码的文件路径、用户访问主题权限的文件路径,配置文如下:

 NormalText Code 

allow_anonymous false # 不允许匿名

password_file /etc/mosquitto/passwd # 配置用户密码文件

acl_file /etc/mosquitto/acl  #配置topic和用户 (此文件是配置用户访问某主题,

如果不配置则使用password_file文件中的用户密码进行访问)

添加用户

 NormalText Code

#mosquitto_passwd -c /etc/mosquitto/passwd pub_client

#mosquitto_passwd /etc/mosquitto/passwd sub_client

第一个命令,参数多一个-c,是创建/etc/mosquito/passwd文件,将用户名和密码写到文件中,用户名是明文,密码是加密过的密文。

第二个命令,是在已有的用户上添加新的用户。

配置好后,代理会屏蔽匿名用户。

为用户添加可操作主题

 NormalText Code 

user pub_client

topic write mtopic/#

user sub_client

topic read mtopic/#

在给定mosquitto.conf中给定acl文件的路径中 打开文件,user后面添加已有用户名,topic 后面添加 可读或者可写的主题,read 是可读,write是可写。

上一篇:MQTT开源软件之EMQ入门篇

下一篇:基于exynos4412的外部中断处理

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部