关于mqtt、mosquito的技术交流,可入群:221779856

 本文由逍遥子撰写,转发请标注原址:

http://blog.csdn.net/houjixin/article/details/21461225


一、  Mosquitto简介

mosquitto是一款实现了消息推送协议MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,例如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。

Mosquitto采用出版/订阅的模式实现MQTT协议,这种设计模式将通信终端之间的关系统一到服务程序中进行管理,可极大减轻客户端的开发和维护工作。

1.1、  mqtt协议简介

MQTT(MessageQueuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。在某些应用场合中,可通过该协议维持与客户端的长连接。关于mqtt协议更详细的介绍,请参考其官方网站:http://mqtt.org/

其他版本源码下载位置:http://mosquitto.org/files/source/

1.2、  出版/订阅模式简介

出版/订阅模式定义了如何向一个节点发布和订阅消息,这些节点被称作主题(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.3、  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

mosquitto源码分析(一)相关推荐

  1. mosquitto源码分析

    mosquitto源码分析 一.mosquitto简介 二.主要目录 三.客户端源码 结构体 重要函数 1.mosquitto_lib_init 2.mosquitto_new 3.mosquitto ...

  2. mosquitto源码分析(六)

    本文由逍遥子撰写,转发请标注原址: http://write.blog.csdn.net/postedit/21465011 一.  Mosquito的辅助功能介绍 Mosquitto代码的辅助功能主 ...

  3. mosquitto源码分析(五)

    本文由逍遥子撰写,转发请标注原址: http://write.blog.csdn.net/postedit/21464519 3.2.1.poll机制简介 Poll机制是一种I/O多路转接(I/O m ...

  4. mosquitto源码分析(四)

    本文由逍遥子撰写,转发请标注原址: http://write.blog.csdn.net/postedit/21463965 3.1.2.使用订阅树发布消息 在Mosquito程序中,消息发送过程主要 ...

  5. mosquitto源码分析(三)

    本文由逍遥子撰写,转发请标注原址: http://write.blog.csdn.net/postedit/21462255 一.  Mosquito的核心功能分析 3.1.订阅树 Mosquitto ...

  6. mosquitto源码分析(二)

     本文由逍遥子撰写,转发请标注原址: http://write.blog.csdn.net/postedit/21462005 一.  Mosquito的数据结构 1)  struct mosquit ...

  7. mosquitto客户端对象“struct mosquitto *mosq”管理下篇(mosquitto2.0.15客户端源码分析之四)

    文章目录 前言 5 设置网络参数 5.1 客户端连接服务器使用的端口号 `mosq->port` 5.2 指定绑定的网络地址 `mosq->bind_address` 5.3 客户端连接服 ...

  8. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  9. SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...

最新文章

  1. [转]Android横竖屏切换解决方案
  2. 自己写的内存池Slabs
  3. Android 手机影音 开发过程记录(六)
  4. 暑假集训中期测试 Problem D: 装箱问题2 (并查集)
  5. 技术干货 | “选图预览并上传”的场景如何解?全网最全方案汇总来了
  6. CSS 实现加载动画之一-菊花旋转
  7. JavaScript css3模拟简单的视频弹幕功能
  8. 自定义ScrollView控件 -- 拉申时跟随缩放效果
  9. 十分钟学会Flask
  10. 微信公众平台开发(83) 生成带参数二维码
  11. gitlab 如何调出工程的setting
  12. 387. First Unique Character in a String - String
  13. 【大话设计模式】模式二 :工厂模式
  14. HTML .CSS实现商品详情(detail)
  15. 苹果回应巴西政府禁止销售不附赠充电器的iPhone;小米造车新进展;国内首家以数据服务为核心的央企数据中台上线 | EA周报...
  16. 小葵花妈妈课堂开课了:《ArrayList源码浅析》
  17. 芯片破解、解密方法介绍
  18. 美式口语发音技巧:《发音总结》
  19. 几种混沌系统混沌模型
  20. 施金源:9.13黄金爆涨爆跌、黄金多单解套、黄金操作布局!

热门文章

  1. msf 使用 hashdump 和 wce 提取 hash
  2. 【干货】商超仓储中心常见的自动化物流拣选系统
  3. 从零开始学习Java设计模式 | 创建型模式篇:抽象工厂模式
  4. PS教程——复古人物海报效果
  5. 设计并实现一个Book类
  6. 解决 select2 开启 tags 输入中文显示不全的BUG
  7. 双11,为什么说是一场由中国人忽悠中国人的购物狂欢节?
  8. OSGi-Equinox
  9. mendeley 笔记_文献管理 | Mendeley 的基础使用方法
  10. 论文中存在抄袭的后果