mosquitto源码分析(一)

article/2025/10/23 0:30:21

关于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

 


http://chatgpt.dhexx.cn/article/tp0fItWe.shtml

相关文章

mosquitto安装与使用

Eclipse Mosquitto 是实现MQTT协议版本5.0、3.1.1和3.1的开源消息代理&#xff08;经EPL / EDL许可&#xff09;。mosquitto 是一个开源的轻量级的C实现&#xff0c;适合在从低功耗单板计算机到完整服务器的所有设备上使用。mosquitto包括服务端和客户端。官网&#xff1a;http…

NMOS和PMOS管

这里我先说一下我自己分辨MOS管的方法 对于NMOS我们看下图中的箭头&#xff0c;都是远离源头。 对于PMOS我们看箭头&#xff0c;都是指向源头 P&#xff1a;POSITIVE积极的寻找自己的起源 N&#xff1a;NEGTIVE消极的远离自己的源头 首先明确一点&#xff0c;S是源极&#xff…

mosquitto接口流程图

接口流程图 1、mosquitto_new2、mosquitto_reinitialise3、mosquitto_connect_async4、mosquitto_loop5、mosquitto_loop_start6、mosquitto_loop_stop7、mosquitto_loop_forever8、mosquitto client自定义开发流程 1、mosquitto_new 2、mosquitto_reinitialise 3、mosquitto_c…

Mosquitto常用命令

1 mosquitto服务器的搭建 服务器这里使用了阿里云的服务器&#xff0c;mosquitto默认需要1883的TCP入端口。需要在安全策略里设置一下。端口当然也可以选其他端口进行配置。 服务安装 # 服务器终端安装mosquitto和mosquitto-clients&#xff0c;后者是一些客户端&#xff0c;…

mosquitto 在 Windows 上的安装

文章目录 第一步&#xff1a;准备安装文件第二步&#xff1a;安装Mosquitto第三步&#xff1a;安装OpenSSL第四步&#xff1a;将要求的DLL放置Mosquitto安装目录下第五步&#xff1a;添加环境变量第六步&#xff1a;验证 第一步&#xff1a;准备安装文件 安装文件点此下载 注…

Mosquitto --topic

订阅树的概念 Mosquitto通过订阅树的方式来管理所有的topic以及客户端的订阅关系&#xff0c;它首先将所有的topic按照/分割并组织成一棵树结构&#xff0c;从根节点到树中的每个节点即组成该节点所对应的一个topic&#xff0c;每个topic都保存一个订阅列表&#xff0c;…

Mosquitto简介及搭建

文章钢要&#xff1a; 1、了解Mosquitto服务器 2、在Liunx中搭建Mosquitto服务器 3、设置Mosquitto集群 一、Mosquitto简介 一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件&#xff0c;提供轻量级的&#xff0c;支持可发布/可订阅的的消息推送模式&#xff0c;使设备对…

[移动] Mosquitto简要教程(安装/使用/测试)

上篇文章《 Android主流推送方案分析&#xff08;MQTT/XMPP/GCM&#xff09;》中&#xff0c;我们给大家介绍了&#xff0c;如何在移动领域使用灵巧的消息传输协议MQTT来完成消息推送&#xff0c;最后也提到了开源项目Mosquitto。实际上&#xff0c;Mosquitto是一个实现了MQTT…

MQTT Broker mosquito配置以及使用tls证书登录附上Python调用代码

MQTT Broker mosquito配置以及使用tls证书登录 文章目录 MQTT Broker mosquito配置以及使用tls证书登录1. 前言2. 安装3. mosquito相关命令3.1 运行停止查看状态3.2 创建可以登录mosquito的用户3.3 配置权限规则文件3.4 配置mosquito3.5 使用mosquito_pub和mosquito_sub测试3.5…

Mosquitto安装及使用

本文简要介绍MQTT服务器mosquitto的安装以及最基本的使用。 第一步&#xff0c; 下载 我的ubuntu是16.4 64bit的虚拟机&#xff0c; mosquitto-1.5.tar.gz 从https://mosquitto.org/download/下载。 第二步 编译和安装 我们先解压&#xff0c;然后执行make&#xff0c; mak…

Mosquitto安装及使用简介

1、源码下载&#xff1a; &#xff08;1&#xff09;官方源码下载&#xff1a;http://mosquitto.org/files/source/ &#xff08;2&#xff09;性能优化版源码下载&#xff1a;https://github.com/houjixin/mosquitto-1.4.11-opt &#xff08;3&#xff09;性能优化版优化方…

SQL--数据查询

特别提示&#xff1a;图片有水印&#xff0c;请不要直接使用 pcshop——Oracle版本 CREATE TABLE customers ( customer_id varchar2(10) NOT NULL, firstname varchar2(32) default NULL, lastname varchar2(32) default NULL, city varchar2(32) default NULL, address var…

SQL查询优化

SQL查询优化 一、获取有性能问题SQL的三种方法 通过用户反馈获取存在性能问题的SQL 通过慢查询日志获取存在性能问题的SQL 实时获取存在性能问题的SQL 二、慢查询日志介绍 1、使用慢查询日志获取有性能问题的SQL (1) 参数配置 slow_query_log 启动停止记录慢查询日志 .…

sql查询排序

查询排序 如果需要针对查询后的结果&#xff0c;按照指定的数据列进行排序操作&#xff0c;就必须使用ORDER BY 默认排序&#xff1a;按照数据的插入顺序。 select * from emp;观察 语法格式 【3控制要显示的数据列】SELECT[DISTINCT]*|列名称[别名]&#xff0c;列名称[别名…

SQL 查询数据

数据库表是存储数据库中所有数据的对象。 在表中&#xff0c;数据按行和列格式逻辑组织&#xff0c;类似于电子表格 (Excel) 在表中&#xff0c;每行代表一个唯一记录&#xff0c;每列代表记录中的一个字段。 例如&#xff0c; SC表包含学生成绩数据&#xff0c;如学生标识号&a…

SQL之查询

因为同一SQL语句&#xff0c;不同厂商有不同的实现方式&#xff0c;因此同一SQL语句不一定在所有的数据库编辑器上能够正确运行&#xff0c;这里采用的是华为的openGauss。 基本格式为&#xff1a; SELECT desired attributes FROM one or more tables WHERE condition about…

SQL查询与操作

1.单表查询 SQL 数据查询主要由 SELECT 语句完成&#xff0c;SELECT 语句是SQL 的核心。单表查询就是利用 SELECT语句仅从一个表/视图中查询数据。其语法如下: SELECT [DISTINCT]*{ 字段名 1&#xff0c;字段名 2&#xff0c; 字段名 3,… FROM 表名 [WHERE 条件表达式 1] [GR…

sql的查询

sql的查询 &#xff08;1&#xff09;什么是排序 order by&#xff08;2&#xff09;如何排序 》》数据库的查询(排序:order by) SELECT * FROM 表名 ORDER BY 排序字段 ASC(升序)|DESC(降序);&#xff08;3&#xff09;特点 指定列 指定升序或者降序 order by 排序只对数字和…

SQL 数据查询

前言&#xff0c;数据库中有5个表&#xff0c;student&#xff0c;sc,course,tc,teacher;(sql server里面不区分大小写) student sc tc course teacher 1. 查询软件工程学院&#xff08;SE&#xff09;学生的学…

SQL数据查询

目录 1、求各系学生的平均成绩&#xff0c;并把结果存入新建的数据库表中&#xff08;请自己创建一个表存放结果&#xff09; 2、统计每门课程的选修学生人数及各门课程的平均成绩 3、找出各系年龄最大的学生&#xff0c;显示其学号、姓名&#xff1b;&#xff08;利用相关子…