mosquitto是一款实现了消息推送协议MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单。 Mosquitto采用出版/订阅的模式实现MQTT协议,这种设计模式将通信终端之间的关系统一到服务程序中进行管理,可极大减轻客户端的开发和维护工作。

一.mosquitto安装 # 下载源代码包
wget http://mosquitto.org/files/source/mosquitto-1.3.4.tar.gz
# 解压
tar zxfv mosquitto-1.3.4.tar.gz
# 进入目录
cd mosquitto-1.3.4
# 编译
make
# 安装
sudo make install----------//1.1 安装可能遇见的错误
【1】编译找不到openssl/ssl.h//安装openssl
sudo apt-get install libssl-dev【2】编译过程找不到ares.h//修改config.mk文件修改config.mk中的WITH_SRV:=yes,改为WITH_SRV:=no如果编辑config.mk文件失败,赋予权限输入命令:chmod 777 -Rf *【3】使用过程中找不到libmosquitto.so.1//修改libmosquitto.so位置, 创建链接sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1// 更新动态链接库sudo ldconfig【4】make: g++:命令未找到  // 安装g++编译器
sudo apt-get install g++----------//1.2 配置文件# =================================================================# 客户端心跳的间隔时间
#retry_interval 20# 系统状态的刷新时间
#sys_interval 10# 系统资源的回收时间,0表示尽快处理
#store_clean_interval 10# 服务进程的PID
#pid_file /var/run/mosquitto.pid# 服务进程的系统用户
#user mosquitto# 客户端心跳消息的最大并发数
#max_inflight_messages 10# 客户端心跳消息缓存队列
#max_queued_messages 100# 用于设置客户端长连接的过期时间,默认永不过期
#persistent_client_expiration# =================================================================
# Default listener
# =================================================================# 服务绑定的IP地址
#bind_address# 服务绑定的端口号
#port 1883# 允许的最大连接数,-1表示没有限制
#max_connections -1# cafile:CA证书文件
# capath:CA证书目录
# certfile:PEM证书文件
# keyfile:PEM密钥文件
#cafile
#capath
#certfile
#keyfile# 必须提供证书以保证数据安全性
#require_certificate false# 若require_certificate值为true,use_identity_as_username也必须为true
#use_identity_as_username false# 启用PSK(Pre-shared-key)支持
#psk_hint# SSL/TSL加密算法,可以使用“openssl ciphers”命令获取
# as the output of that command.
#ciphers# =================================================================
# Persistence
# =================================================================# 消息自动保存的间隔时间
#autosave_interval 1800# 消息自动保存功能的开关
#autosave_on_changes false# 持久化功能的开关
persistence true# 持久化DB文件
#persistence_file mosquitto.db# 持久化DB文件目录
#persistence_location /var/lib/mosquitto/# =================================================================
# Logging
# =================================================================# 4种日志模式:stdout、stderr、syslog、topic
# none 则表示不记日志,此配置可以提升些许性能
log_dest none# 选择日志的级别(可设置多项)
#log_type error
#log_type warning
#log_type notice
#log_type information# 是否记录客户端连接信息
#connection_messages true# 是否记录日志时间
#log_timestamp true# =================================================================
# Security
# =================================================================# 客户端ID的前缀限制,可用于保证安全性
#clientid_prefixes# 允许匿名用户
#allow_anonymous true# 用户/密码文件,默认格式:username:password
#password_file# PSK格式密码文件,默认格式:identity:key
#psk_file# pattern write sensor/%u/data
# ACL权限配置,常用语法如下:
# 用户限制:user <username>
# 话题限制:topic [read|write] <topic>
# 正则限制:pattern write sensor/%u/data
#acl_file# =================================================================
# Bridges
# =================================================================# 允许服务之间使用“桥接”模式(可用于分布式部署)
#connection <name>
#address <host>[:<port>]
#topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix]# 设置桥接的客户端ID
#clientid# 桥接断开时,是否清除远程服务器中的消息
#cleansession false# 是否发布桥接的状态信息
#notifications true# 设置桥接模式下,消息将会发布到的话题地址
# $SYS/broker/connection/<clientid>/state
#notification_topic# 设置桥接的keepalive数值
#keepalive_interval 60# 桥接模式,目前有三种:automatic、lazy、once
#start_type automatic# 桥接模式automatic的超时时间
#restart_timeout 30# 桥接模式lazy的超时时间
#idle_timeout 60# 桥接客户端的用户名
#username# 桥接客户端的密码
#password# bridge_cafile:桥接客户端的CA证书文件
# bridge_capath:桥接客户端的CA证书目录
# bridge_certfile:桥接客户端的PEM证书文件
# bridge_keyfile:桥接客户端的PEM密钥文件
#bridge_cafile
#bridge_capath
#bridge_certfile
#bridge_keyfile二.mosquitto安装完成后,启动服务端 输入命令:mosquitto2.1接着再开个终端当做客户端订阅消息,例子:进入mosquitto-1.3.4输入命令:mosquitto_sub  -t test -h 192.168.1.162// mosquitto_sub 是订阅消息,-t 是要订阅的主题,-h 服务端的ip地址2.2 然后要开个客户端推送消息,安装虚拟机,安装ubuntu,例子:进入mosquitto-1.3.4输入命令:mosquitto_pub -t test -m "123456" -h 192.168.1.162// mosquitto_pub 是发布消息,-t 是要发布的主题,-h 服务端的ip地址--------------------
三.**mosquitto_pub参数说明:**
-d,                  // 开启debug选项-f, --file           // 把一个文件的内容做为消息的内容发送。经测试,支持txt文件,不   支持doc等其他形式文件。-h, --host            //说明所连接到的域名,默认是localhost-i, --id              //客户端的ID号,如果没有指定,默认是mosquitto_pub_加上客户端的进程id,不能和--id_prefix同时使用。 -I, --id-prefix       //指定客户端ID的前缀,与客户端的进程ID连接组成客户端的ID,不能喝--id同时使用。-l, --stdin-line      //从总段读取输入发送消息,一行为一条消息,空白行不会被发送。-m, --message        // 从命令行发送一条消息,-m后面跟发送的消息内容。-n, --null-message    //发送一条空消息。-p, --port           // 连接的端口号,默认是1883.-P, --pw (大写P)     // 指定密码用于代理认证,使用此选项时必须有有效的用户名。 -q, --qos            //  指定消息的服务质量,可以为0,1,2,默认是0.--quiet               // 如果指定该选项,则不会有任何错误被打印,当然,这排除了无效的用户输入所引起的错误消息。-r, --retain         //  如果指定该选项,该条消息将被保留做为最后一条收到的消息。下一个订阅消息者将能至少收到该条消息。-s, --stdin-file       //从标准输入接收传输的消息内容,所有输入做为一条消息发送。-t, --topic           // 指定消息所发布到哪个主题。-u, --username        // 指定用户名用于代理认证。--will-payload       // 如果指定该选项,则万一客户端意外和代理服务器断开,则该消息将被保留在服务端并发送出去,该选项必须同时用--will
-topic                // 指定主题。
--will-qos           //  指定Will的服务质量,默认是0.必须和选项 --will-topic同时使用.--will-retain         // 如果指定该选项,则万一客户端意外断开,已被发送的消息将被当做retained消息。必须和选项 --will-topic同时使用.--will-topic          // 指定客户端意外断开时,Will消息发送到的主题。--------------------**3.1mosquitto_pub参数说明(跟mosquitto_sub不同的)**
-c, --disable-        // clean-session 禁止'clean session'选项,即如果客户端断开连接,这个订阅仍然保留来接收随后到的QoS为1和2的消息,当改客户端重新连接之后,它将接收到已排在队列中的消息。建议使用此选项时,客户端id选项设为--id-k, --keepalive       // 给代理发送PING命令(目的在于告知代理该客户端连接保持且在正常工作)的间隔时间,默认是60s-v, --verbose        // 冗长地打印收到的消息。若指定该选项,打印消息时前面会打印主题名——“主题 消息内容”,否则,只打印消息内容--------------------
四.mosquitto分析【1】程序文件说明mosquitto – 代理器主程序mosquitto.conf – 配置文件mosquitto_passwd – 用户密码管理工具mosquitto_tls –  SSL和TLSmosquitto_pub – 用于发布消息的命令行客户端mosquitto_sub – 用于订阅消息的命令行客户端mqtt – MQTT的后台进程libmosquitto – 客户端编译的库文件【2】使用订阅树发布消息在Mosquito程序中,消息发送过程主要通过遍历订阅树来完成,具体为:递归遍历订阅树找到指定的订阅列表,并将消息挂到订阅列表中的每个contextg的消息队列中,如果消息的retain字段被设置为1,则mosquitto还需要保存此消息,以备新订阅的客户端可以立即收到上次发送的消息;另外,发往系统topic的消息也会被mosquitto保存起来。上述消息发送过程主要通过函数mqtt3_db_messages_queue来完成。【3】从订阅树中删除订阅客户端在Mosquitto程序中,客户端可以向mosquitto服务器发送取消对某个topic的订阅请求,服务器收到请求之后,将从订阅树中删除该客户端,该过程需要遍历订阅树以找该topic在订阅树中的位置,进而获得到订阅该topic的订阅列表,从而将其从订阅树中删掉。该过程与发送消息类似,首先将topic进行分片,然后根据topic片段遍历订阅树找到该topic的订阅列表;然后遍历订阅列表,将该客户端从订阅列表中删除。【4】订阅树机制的优缺点Mosquito程序采用订阅树形式维护客户端之间的订阅与发布消息,这种方式优点是逻辑清晰,便于开发和维护。缺点是其遍历过程效率较低。同时,程序中存在很多对订阅树的遍历过程:订阅、发布消息、取消订阅等,在客户端数量增加时,该功能对效率的影响将更为明显。

ubuntu下使用mosquitto与分析相关推荐

  1. Ubuntu下安装配置TAU分析mpich和openmp程序性能

    目录 1. 安装MPICH 2. 安装JAVA环境 3. 下载TAU(及PDT) 4. 提取并配置安装 4.1 使用图形化界面安装 4.2 使用终端直接配置 5. 配置Vs Code或直接使用终端编译 ...

  2. 在ubuntu下用mosquitto搭建mqtt服务器,mqtt.fx的tls加密连接

    1.sudo apt-get install mosquitto mosquitto-clients mosquitto-dev 安装mosquitto及相关组件 2.在/etc/mosquitto/ ...

  3. ubuntu下nginx配置

    ubuntu下nginx配置 文章目录 ubuntu下nginx配置 初步分析 查看nginx.service 找到服务文件 查看服务文件 查看配置文件的加载路径 配置文件分析 全局指令块 http指 ...

  4. 坚果云一直显示分析的解决办法与ubuntu下坚果云选择性忽略的方法

    直接从云端与本地删除一直在分析的文件即可. ps:用坚果云同步.git时很容易一直卡在分析文件上,因此不推荐使用坚果云同步代码库 ubuntu下坚果云选择性忽略部分文件/文件夹/文件类型的方法: 进入 ...

  5. ubuntu下禁止TeamViewer开机自启分析

    由于习惯在Windows下用TeamViewer,所以我在ubuntu下也装上了TeamViewer(deb包),可是TeamViewer开机自启选项怎么也改不了,查查进程和安装目录,才发现TeamV ...

  6. ubuntu下使用串口调试终端minicom链接typec接口

    在windows下串口调试工具太多了.xshell,putty,不一一列举儿了.今天咱们说的在ubuntu下的串口调试工具minicom. 1.安装minicom sudo apt install m ...

  7. Ubuntu下SSH设置

    2019独角兽企业重金招聘Python工程师标准>>> 网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最 ...

  8. Ubuntu下开启SSH服务

    网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务.最终成功的方法如下: ...

  9. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

最新文章

  1. 一些linux下的性能监测工具
  2. 【墙裂推荐】【原生基础版】js原生实现拖拽效果,注意不要忘了div的cursor用grab和grabbing 还是古法炮制、传统工艺的原生代码兼容性最好,推荐
  3. HTML5 script 标签的 crossorigin 和integrity属性的作用
  4. 多线程利器-队列(queue)
  5. CSP前训练错误集锦
  6. 编译安装 apache 2.4.6
  7. leetcode 796. 旋转字符串(Rotate String)
  8. linux mint php mysql_linux mint 下mysql中文支持问题
  9. docker portainer_Docker可视化管理:Portainer中文版
  10. HTML5能取代Android和iOS应用程序吗?
  11. 基于SpringBoot的在线问卷调查管理系统
  12. 第三方支付-分账接口对接
  13. linux 下载文件
  14. 如何在Word中的项目符号列表中自定义项目符号
  15. iSpiik产品说:谈谈小程序直播-数据背后几个思考
  16. HDU4598 Difference(差分约束)
  17. c语言入门编辑什么,萌新必看——C语言入门编辑器推荐
  18. Excel如何快速提取图片地址位置?
  19. Excel同一单元格多数据如何求平均数
  20. apache评分标准_危重病人APACHE II评分表(标准)

热门文章

  1. 基于PIE-Engine 监测黄海海域浒苔绿潮发展过程
  2. 红旗linux 操作系统,红旗Linux操作系统9.0官方下载-红旗Linux操作系统9.0正式版(基于c语言)免费版 - 维维软件园...
  3. 第033层:Java核心知识点面试题之-MySql篇
  4. 贝叶斯统计R语言操作3——假设检验
  5. 华夫饼为什么不松软_华夫饼自己在家做,不加泡打粉,松软又可口,操作简单,一学就会...
  6. AVA中Iterator
  7. c语言稀疏矩阵_C中的稀疏矩阵
  8. 通过FinalShell连接AWS的EC2服务器
  9. 【前端】CSS(十一)PC端品优购项目(下)
  10. c语言算法有效性,BerForest—C语言学习笔记-《算法》