关于mqtt、mosquito的技术交流,可入群:221779856python
本文由逍遥子撰写,转发请标注原址:mysql
http://blog.csdn.NET/houjixin/article/details/21461225
sql
1、 Mosquitto简介设计模式
mosquitto是一款实现了消息推送协议MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通讯变得简单,例如如今应用普遍的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。服务器
Mosquitto采用出版/订阅的模式实现MQTT协议,这种设计模式将通讯终端之间的关系统一到服务程序中进行管理,可极大减轻客户端的开发和维护工做。网络
1.一、 mqtt协议简介tcp
MQTT(MessageQueuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通信协议,有可能成为物联网的重要组成部分。在某些应用场合中,可经过该协议维持与客户端的长链接。关于mqtt协议更详细的介绍,请参考其官方网站:http://mqtt.org/网站
其余版本源码下载位置:http://mosquitto.org/files/source/ui
1.二、 出版/订阅模式简介this
出版/订阅模式定义了如何向一个节点发布和订阅消息,这些节点被称做主题(topic)。主题能够被认为是消息的传输中介,发布者(publisher)发布消息到主题,订阅者(subscriber) 从主题订阅消息。这种模式使得消息订阅者和消息发布者保持互相独立,不须要接触便可保证消息的传送。
Tcp协议中,tcp链接只提供一对一的可靠传输,例如:主机A与B进行通讯,则发起tcp链接的一端只须要知道对方的ip地址和端口号便可,以下图1-1所示:
图1-1 一对一通讯
每个tcp链接都是由下面的五个元素肯定:
<源ip地址,源端口号,目的ip地址,目的端口号,通讯协议>
在实际程序的开发过程当中 一条链接创建以后,它可能须要在一段时间内一直被通讯双方所保持,以备下次数据传输使用。另外,通讯的终端数目多是多个,这就须要每一个终端都要维持它全部的通讯关系,以下图1-2所示
图1-2 多对多通讯
此时,每一个参与通讯的客户端所需维持的链接数量将很是庞大,这很是不利于程序的开发和实现。出版/订阅模式便是一种解决这种问题的方法,它经过增长一个中间层的方式,让中间层来维护这种多对多的关系,这个中间层一般称之为服务器,以下图1-3所示:
图1-3 增长中间层的多对多通讯
经过增长中间层服务器,每一个客户端都只须要维护本身同服务器之间的链接便可,而客户端之间的关系则交由中间服务器来维护,这种设计模式将复杂的通讯关系维护工做从客户端剥离出来,很是方便客户端的开发和维护。
Mosquito程序便是经过这种方式进行工做,在mosquitto程序内部,将客户端之间的关系经过一棵订阅树来维持。
1.三、 Mosquito
Mosquito源码目录结构介绍。
|---- mosquitto-1.2
|---- client
|---- examples
|----mysql_log
|----temperature_conversion
|---- installer
|---- lib
|---- cpp
|---- jsws
|----Python
|---- logo
|---- man
|---- po
|----libmosquitto
|----mosquitto
|----mosquitto.conf
|----mosquitto_pub
|----mosquitto_sub
|----mosquitto-tls
|----mqtt
|---- misc
|----currentcost
|----gnome-panel
|---- security
|---- service
|---- monit
|----svscan
|----upstart
|---- src
|----db_dump
|---- test
|----broker
|---- c
|---- lib
|---- c
|----cpp
|----python
|----python3
|---- ssl
|----demoCA
|----rootCA
|----signingCA
所需关注的目录有/ mosquitto-1.2/src、/ mosquitto-1.2/lib、/ mosquitto-1.2/client三个目录,其中src和lib目录下主要放置mosquitto的实现代码以及部分底层与网络相关的操做,client目录主要为两个客户端程序的实现源码。
Mosquito的源码及其相关文档可从其官方网站获取,其官方网站为:http://mosquitto.org/
mosquitto客户端和服务器运行命令
[1] 发布者客户端运行命令示例:./mosquitto_pub -h 192.168.6.243 -p 1883 -t "111" -m "this is jason.hou" -u 111 -P 111[2] 订阅者客户端运行命令示例:./mosquitto_sub -h 192.168.6.243 -i 111 -p 1883 -t 111 -k 60 -d -c -u hjx -P hjx[3] mosquitto服务器端运行命令示例:./mosquitto