搭建MQTT服务器

MQTT协议简介

MQTT 是一个基于发布/订阅模式的消息传输协议。它具备轻量级、开放、简单,易于实现,通讯带宽要求低等特色。这些特色使得它对机器与机器的通讯(M2M)以及物联网应用(IoT)来讲是很好的选择。它还被应用到手机APP和Web应用中。 浏览器

MQTT于1999年由Andy Stanford-Clark(IBM)和Arlen Nipper(Arcom,现为Cirrus Link)发明,最初的应用是为了以最小的电池损耗和最小网络带宽将石油管道数据经过卫星进行传输。在MQTT最第一版本发布3年后,OASIS开源组织接管MQTT的标准化制定工做。MQTT现在的最新版本为MQTT3.1.1,相比MQTT3.1的变更很小,但仍是鼓励使用3.1.1版本,3.1.1已经成为了ISO标准。

 

客户端/服务器模式 vs 发布/订阅模式服务器

传统的网络通讯模式几乎都是基于客户端/服务器模式的:客户端直接和一个服务端创建链接,通讯来获取数据,数据源和数据目的地双方直接链接。好比在Web应用程序中,浏览器直接和Web服务器经过HTTP协议通讯,浏览器须要知道服务器的IP和端口号。网络

 

而发布/订阅模式解耦了客户端,客户端分为2种角色:发布者(Publisher)和订阅者(Subscriber)。每个发布者(Publisher)能够发送不一样类型的消息,咱们把消息的类型叫作主题(topic),MQTT通讯中的消息都属于某一个主题  ,而只有订阅了这个主题的订阅者(Subscriber)才能收到属于这个主题的消息。发布者和订阅者不须要在乎和知道对方的存在(不须要知道对方的IP和端口),也不须要直接与对方创建链接。由于通讯中存在着一个叫代理(MQTT broker)的第三种角色,也能够叫MQTT服务器(MQTT server)。 
发布者、订阅者只须要知道MQTT 服务器的IP和端口便可,并和它直接创建链接通讯。MQTT代理做为消息的中转,它过滤全部接受到的消息,并按照必定的机制(MQTT标准规定是基于主题的消息过滤派发方式,而具体的MQTT服务器软件也提供了其余的派发方式)分发它们,使得全部注册到MQTT代理的订阅者只接收到他们订阅了的消息,而不会收到他不关心的消息。
当发布者发布一条消息的时候,他必须同时指定消息的主题和消息的负载。MQTT代理在收到发布者发过来的消息时,无需访问消息负载,他只是访问消息的主题信息,而后根据这主题派发给订阅者。须要注意的是,一个客户端能够同时既当发布者又当订阅者。好比一个开发板链接了一盏LED灯,它能够发布灯的暗/亮状态信息,也能够从其余节点订阅对灯的控制消息。

 

搭建MQTT服务器

需求项目 实际使用 其它替代品
MQTT服务器软件

mosquitto工具

/测试

公网服务器 搬瓦工VPS,Ubuntu系统,带一个IPv4地址 阿里云,腾讯云等
远程登陆软件 FinalShell putty等

 

一、安装 ui

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa     #添加源到软件仓库
sudo apt-get update                                         #更新软件仓库列表
sudo apt-get install mosquitto                              #安装mosquitto

二、试运行阿里云

sudo service mosquitto status                               #查看运行状态
sudo service mosquitto start                                #启动服务
sudo service mosquitto stop                                 #中止服务

三、添加和修改配置spa

sudo service mosquitto stop   #首先中止服务

#用户的局部配置文件放在: /etc/mosquitto/conf.d/目录下,而且这个目录下的全部以.conf后缀的文件都将被mosquitto做为配置文件,在启动时加载。

#在/etc/mosquitto/conf.d目录下,新建myconfig.conf配置文件

#在其中输入以下内容
#-------------------------------------------
# 关闭匿名访问,客户端必须使用用户名
allow_anonymous false

#指定 用户名-密码 文件
password_file /etc/mosquitto/pwfile.txt
#--------------------------------------------

四、建立一个MQTT服务器帐户命令行

假设用户名为:user1
在命令行运行:mosquitto_passwd -c /etc/mosquitto/pwfile.txt user1

回车后连续输入2次用户密码便可

五、从新启动mosquitto代理

sudo service mosquitto start      #启动服务

 

 测试mosquitto

在App Store下载MQTTool工具。

 

 订阅一个消息,主题为test

 

发布主题为test的消息,点击发送后,点底部的Subscribe,看是否收到了推送。