zoukankan      html  css  js  c++  java
  • 转:mosquitto源码分析(一)

    一、  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  

  • 相关阅读:
    SQLite无法使用drop column删除表字段解决办法
    Selenium之自动发送163邮件(转自https://www.cnblogs.com/zhang-da/p/12230415.html)
    frp 内网穿透
    smart.supor.com
    python colorama模块
    nohup和&后台运行,进程查看及终止
    Beef搭建并通过Nginx绑定域名
    How to Install Ruby on CentOS/RHEL 7/6
    Linux环境下安装python3
    启用IIS Express SSL(Https)的注意事项
  • 原文地址:https://www.cnblogs.com/killer-xc/p/6775552.html
Copyright © 2011-2022 走看看